diff options
Diffstat (limited to 'source3/printing/load.c')
-rw-r--r-- | source3/printing/load.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/source3/printing/load.c b/source3/printing/load.c new file mode 100644 index 0000000000..23144d5a95 --- /dev/null +++ b/source3/printing/load.c @@ -0,0 +1,64 @@ +/* + Unix SMB/CIFS implementation. + load printer lists + Copyright (C) Andrew Tridgell 1992-2000 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" + + +/*************************************************************************** +auto-load some homes and printer services +***************************************************************************/ +static void add_auto_printers(void) +{ + const char *p; + int pnum = lp_servicenumber(PRINTERS_NAME); + char *str; + char *saveptr; + + if (pnum < 0) + return; + + if ((str = SMB_STRDUP(lp_auto_services())) == NULL) + return; + + for (p = strtok_r(str, LIST_SEP, &saveptr); p; + p = strtok_r(NULL, LIST_SEP, &saveptr)) { + if (lp_servicenumber(p) >= 0) + continue; + + if (pcap_printername_ok(p)) + lp_add_printer(p, pnum); + } + + SAFE_FREE(str); +} + +/*************************************************************************** +load automatic printer services +***************************************************************************/ +void load_printers(void) +{ + if (!pcap_cache_loaded()) + pcap_cache_reload(); + + add_auto_printers(); + + /* load all printcap printers */ + if (lp_load_printers() && lp_servicenumber(PRINTERS_NAME) >= 0) + pcap_printer_fn(lp_add_one_printer); +} |