[Samba] Re: CUPS, APW

Martin Zielinski mz at seh.de
Mon Dec 6 16:14:06 GMT 2004


Hello,
you shouldn't need to restart samba.

I'm using a C-programm as addprinter command, and do not need to restart 
samba.
Samba does it by it's own, if it receives one or more lines of text from the 
script.
You allways get these access denied errors, when no line is printed.
I know nearly nothing about perl, but (just as an idea) the script output 
needs a newline at its end. I don't know, if perl does this automaticly.

In doubt, take a look at a level 10 debug. You should see the output of your 
script.

Bye,

Martin

On Monday 06 December 2004 16:29, Jeff Hardy wrote:
> > | I am left with two problems... the Access Denied error,
> > | and the requirement for an external daemon to restart
> > | Samba to complete the process.  It works, but I seem to
> > | be missing something.
> >
> > A simple kill -HUP <pid> is enough.  You shouldn't restart
> > smbd.
>
> Thanks again.  I had previously done this but switched to a restart for
> some reason.
>
> Here is a stripped down version of my Perl addprinter script, for what
> it is worth.  When I looked into this before, I didn't find many
> examples so maybe it is of some use.  Trying to nail that Access Denied
> problem... if you could, can you please tell me if you see anything
> wrong or missing?
>
> Thanks again for all your help.
>
>
>
> #!/usr/bin/perl
> #
> # param 1 : printer name
> # param 2 : share name   -> become the printer name for CUPS
> # param 3 : port name
> # param 4 : driver name
> # param 5 : location     -> the device uri of the printer, probably IP
> addy
> # param 6 : win9x location
>
> require '/usr/local/bin/smbapwlib.pl';  #some useful functions
>
> #take in args
> $lpname=shift;
> $shname=shift;
> $portname=shift;
> $drivername=shift;
> $location=shift;
> $win9x=shift;
>
> #if queue exists, don't do anything
> #this is because addprinter command is run each time printer modified
> if (!(&checkqueue($shname))){
>
>         $shname = uc($shname);
>
>         #check for location syntax
>         #if no protocol specified...
>         if ($location !~ m#:/#){
>                 #assume an lpd printer
>                 $location = "lpd://".$location;
>         }
>
>  #run the cups lpadmin command to add the printer
>         system("/usr/sbin/lpadmin -p $shname -D \"$drivername\" -E -v
> $location");
>
>  sleep 1;
>
>         #print sharename to make the port look nice
>         #also supposed to cause samba to reload its config
>         print ("$shname");
>
>         #reload samba manually
>         system("/usr/bin/killall","-HUP","smbd");
>
>         sleep 2;
> }

-- 
Martin Zielinski                       mz at seh.de
Software Development
SEH Computertechnik GmbH     www.seh.de


More information about the samba mailing list