From ccc700c3722d6352ad8bb6d81bb46ccccf87133c Mon Sep 17 00:00:00 2001 From: zacheiss Date: Fri, 16 Oct 2009 16:23:10 +0000 Subject: [PATCH] Begone, Ctrl-Ms. --- gen/cups-lpd.pc | 398 ++++++++++++++++++++++++------------------------ 1 file changed, 199 insertions(+), 199 deletions(-) diff --git a/gen/cups-lpd.pc b/gen/cups-lpd.pc index 5652f6a8..7f43a2f4 100644 --- a/gen/cups-lpd.pc +++ b/gen/cups-lpd.pc @@ -1,199 +1,199 @@ -/* $Id$ - * - * This generates printcaps and other files for Athena print servers - * - * Copyright (C) 1992-1998 by the Massachusetts Institute of Technology. - * For copying and distribution information, please see the file - * . - */ - -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include -#ifdef HAVE_KRB4 -#include -#endif -#include - -#include "util.h" - -EXEC SQL INCLUDE sqlca; - -RCSID("$Header$"); - -char *whoami = "cups-lpd-print.gen"; -char *db = "moira/moira"; - -/* OMG, I hate this, but it's cleaner, I guess? */ - -void do_host(char *host); -void sqlerr(void); -#ifndef MAX -#define MAX(a, b) ( (a) > (b) ? (a) : (b) ) -#endif - -int main(int argc, char **argv) -{ - EXEC SQL BEGIN DECLARE SECTION; - char name[MACHINE_NAME_SIZE]; - EXEC SQL END DECLARE SECTION; - - init_acls(); - - EXEC SQL CONNECT :db; - - EXEC SQL WHENEVER SQLERROR DO sqlerr(); - - EXEC SQL DECLARE csr_hosts CURSOR FOR - SELECT m.name FROM machine m, serverhosts sh - WHERE m.mach_id = sh.mach_id AND sh.service = 'CUPS-LPD' AND sh.enable = 1; - EXEC SQL OPEN csr_hosts; - while (1) - { - EXEC SQL FETCH csr_hosts INTO :name; - if (sqlca.sqlcode) - break; - - strtrim(name); - do_host(name); - } - EXEC SQL CLOSE csr_hosts; - - exit(MR_SUCCESS); -} - -void printer_user_list(FILE *out, char *type, int id, char *str) -{ - struct save_queue *sq; - struct imember *m; - - sq = get_acl(type, id, NULL); - while (sq_remove_data(sq, &m)) - { - if (m->type == 'U') - fprintf(out, "%s %s\n", str, m->name); - freeimember(m); - } - sq_destroy(sq); -} - - - -void do_host(char *host) -{ - EXEC SQL BEGIN DECLARE SECTION; - char rp[PRINTERS_RP_SIZE], name[PRINTERS_NAME_SIZE]; - char duplexname[PRINTERS_DUPLEXNAME_SIZE], location[PRINTERS_LOCATION_SIZE]; - char hwtype[PRINTERS_HWTYPE_SIZE], lowerhwtype[PRINTERS_HWTYPE_SIZE]; - char modtime[PRINTERS_MODTIME_SIZE], lmodtime[LIST_MODTIME_SIZE]; - char contact[PRINTERS_CONTACT_SIZE], hostname[MACHINE_NAME_SIZE]; - char cupshosts[MACHINE_NAME_SIZE], prtype [PRINTERS_TYPE_SIZE]; - char *spoolhost = host, *unixtime_fmt = UNIXTIME_FMT, *p; - char *lhost; - int ka, pc, ac, lpc_acl, top_lpc_acl, banner, rm; - EXEC SQL END DECLARE SECTION; - TARFILE *tf; - FILE *out; - char filename[MAXPATHLEN], *duptc; - time_t mtime, now = time(NULL); - - lhost = (char *) strdup (host); - for (p = lhost; *p; p++) - *p = tolower(*p); - - sprintf(filename, "%s/cups-lpd/%s", DCM_DIR, host); - tf = tarfile_open(filename); - - /* LPRng printers */ - out = tarfile_start(tf, "/etc/cups/lprng.printers.txt", 0644, 0, 0, - "root", "lp", now); - - EXEC SQL DECLARE csr_lprng CURSOR FOR - SELECT pr.rp, pr.name, pr.duplexname, pr.hwtype, - m.name, pr.banner, pr.location, pr.contact, pr.ka, - pr.ac, pr.type as prtype - FROM printers pr, machine m, serverhosts sh - WHERE m.mach_id = sh.mach_id AND sh.service = 'PRINT' AND sh.enable = 1 - AND pr.rm = m.mach_id ORDER BY pr.name; - EXEC SQL OPEN csr_lprng; - while (1) - { - EXEC SQL FETCH csr_lprng INTO :rp, :name, :duplexname, - :hwtype, :hostname, :banner, :location, :contact, :ka, :ac, :prtype; - if (sqlca.sqlcode) - break; - - strtrim(rp); - strtrim(name); - strtrim(duplexname); - strtrim(hwtype); - strtrim(hostname); - strtrim(location); - strtrim(contact); - strcpy(lowerhwtype, hwtype); - for (p = lowerhwtype; *p; p++) - *p = tolower(*p); - for (p = name;*p;p++) - *p = tolower(*p); - for (p = duplexname;*p;p++) - *p = tolower(*p); - - fprintf(out, "%s|%s|%s|%s|%s|%s\n", name,duplexname,hostname,location,hwtype,prtype); - } - EXEC SQL CLOSE csr_lprng; - tarfile_end(tf); - - /* CUPS printers */ - out = tarfile_start(tf, "/etc/cups/cups.printers.txt", 0644, 0, 0, - "root", "lp", now); - - EXEC SQL DECLARE csr_cups CURSOR FOR - SELECT pr.rp, pr.name, pr.duplexname, pr.hwtype, - m.name, pr.banner, pr.location, pr.contact, pr.ka, - pr.ac, pr.type as prtype - FROM printers pr, machine m, serverhosts sh - WHERE m.mach_id = sh.mach_id AND sh.service = 'CUPS-PRINT' AND sh.enable = 1 - AND pr.rm = m.mach_id ORDER BY pr.name; - EXEC SQL OPEN csr_cups; - while (1) - { - EXEC SQL FETCH csr_cups INTO :rp, :name, :duplexname, - :hwtype, :hostname, :banner, :location, :contact, :ka, :ac, :prtype; - if (sqlca.sqlcode) - break; - - strtrim(rp); - strtrim(name); - strtrim(duplexname); - strtrim(hwtype); - strtrim(hostname); - strtrim(location); - strtrim(contact); - strcpy(lowerhwtype, hwtype); - for (p = lowerhwtype; *p; p++) - *p = tolower(*p); - for (p = name;*p;p++) - *p = tolower(*p); - for (p = duplexname;*p;p++) - *p = tolower(*p); - - fprintf(out, "%s|%s|%s|%s|%s|%s\n", name,duplexname,hostname,location,hwtype,prtype); - } - EXEC SQL CLOSE csr_cups; - tarfile_end(tf); - tarfile_close(tf); -} - -void sqlerr(void) -{ - db_error(sqlca.sqlcode); -} +/* $Id$ + * + * This generates printcaps and other files for Athena print servers + * + * Copyright (C) 1992-1998 by the Massachusetts Institute of Technology. + * For copying and distribution information, please see the file + * . + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#ifdef HAVE_KRB4 +#include +#endif +#include + +#include "util.h" + +EXEC SQL INCLUDE sqlca; + +RCSID("$Header$"); + +char *whoami = "cups-lpd-print.gen"; +char *db = "moira/moira"; + +/* OMG, I hate this, but it's cleaner, I guess? */ + +void do_host(char *host); +void sqlerr(void); +#ifndef MAX +#define MAX(a, b) ( (a) > (b) ? (a) : (b) ) +#endif + +int main(int argc, char **argv) +{ + EXEC SQL BEGIN DECLARE SECTION; + char name[MACHINE_NAME_SIZE]; + EXEC SQL END DECLARE SECTION; + + init_acls(); + + EXEC SQL CONNECT :db; + + EXEC SQL WHENEVER SQLERROR DO sqlerr(); + + EXEC SQL DECLARE csr_hosts CURSOR FOR + SELECT m.name FROM machine m, serverhosts sh + WHERE m.mach_id = sh.mach_id AND sh.service = 'CUPS-LPD' AND sh.enable = 1; + EXEC SQL OPEN csr_hosts; + while (1) + { + EXEC SQL FETCH csr_hosts INTO :name; + if (sqlca.sqlcode) + break; + + strtrim(name); + do_host(name); + } + EXEC SQL CLOSE csr_hosts; + + exit(MR_SUCCESS); +} + +void printer_user_list(FILE *out, char *type, int id, char *str) +{ + struct save_queue *sq; + struct imember *m; + + sq = get_acl(type, id, NULL); + while (sq_remove_data(sq, &m)) + { + if (m->type == 'U') + fprintf(out, "%s %s\n", str, m->name); + freeimember(m); + } + sq_destroy(sq); +} + + + +void do_host(char *host) +{ + EXEC SQL BEGIN DECLARE SECTION; + char rp[PRINTERS_RP_SIZE], name[PRINTERS_NAME_SIZE]; + char duplexname[PRINTERS_DUPLEXNAME_SIZE], location[PRINTERS_LOCATION_SIZE]; + char hwtype[PRINTERS_HWTYPE_SIZE], lowerhwtype[PRINTERS_HWTYPE_SIZE]; + char modtime[PRINTERS_MODTIME_SIZE], lmodtime[LIST_MODTIME_SIZE]; + char contact[PRINTERS_CONTACT_SIZE], hostname[MACHINE_NAME_SIZE]; + char cupshosts[MACHINE_NAME_SIZE], prtype [PRINTERS_TYPE_SIZE]; + char *spoolhost = host, *unixtime_fmt = UNIXTIME_FMT, *p; + char *lhost; + int ka, pc, ac, lpc_acl, top_lpc_acl, banner, rm; + EXEC SQL END DECLARE SECTION; + TARFILE *tf; + FILE *out; + char filename[MAXPATHLEN], *duptc; + time_t mtime, now = time(NULL); + + lhost = (char *) strdup (host); + for (p = lhost; *p; p++) + *p = tolower(*p); + + sprintf(filename, "%s/cups-lpd/%s", DCM_DIR, host); + tf = tarfile_open(filename); + + /* LPRng printers */ + out = tarfile_start(tf, "/etc/cups/lprng.printers.txt", 0644, 0, 0, + "root", "lp", now); + + EXEC SQL DECLARE csr_lprng CURSOR FOR + SELECT pr.rp, pr.name, pr.duplexname, pr.hwtype, + m.name, pr.banner, pr.location, pr.contact, pr.ka, + pr.ac, pr.type as prtype + FROM printers pr, machine m, serverhosts sh + WHERE m.mach_id = sh.mach_id AND sh.service = 'PRINT' AND sh.enable = 1 + AND pr.rm = m.mach_id ORDER BY pr.name; + EXEC SQL OPEN csr_lprng; + while (1) + { + EXEC SQL FETCH csr_lprng INTO :rp, :name, :duplexname, + :hwtype, :hostname, :banner, :location, :contact, :ka, :ac, :prtype; + if (sqlca.sqlcode) + break; + + strtrim(rp); + strtrim(name); + strtrim(duplexname); + strtrim(hwtype); + strtrim(hostname); + strtrim(location); + strtrim(contact); + strcpy(lowerhwtype, hwtype); + for (p = lowerhwtype; *p; p++) + *p = tolower(*p); + for (p = name;*p;p++) + *p = tolower(*p); + for (p = duplexname;*p;p++) + *p = tolower(*p); + + fprintf(out, "%s|%s|%s|%s|%s|%s\n", name,duplexname,hostname,location,hwtype,prtype); + } + EXEC SQL CLOSE csr_lprng; + tarfile_end(tf); + + /* CUPS printers */ + out = tarfile_start(tf, "/etc/cups/cups.printers.txt", 0644, 0, 0, + "root", "lp", now); + + EXEC SQL DECLARE csr_cups CURSOR FOR + SELECT pr.rp, pr.name, pr.duplexname, pr.hwtype, + m.name, pr.banner, pr.location, pr.contact, pr.ka, + pr.ac, pr.type as prtype + FROM printers pr, machine m, serverhosts sh + WHERE m.mach_id = sh.mach_id AND sh.service = 'CUPS-PRINT' AND sh.enable = 1 + AND pr.rm = m.mach_id ORDER BY pr.name; + EXEC SQL OPEN csr_cups; + while (1) + { + EXEC SQL FETCH csr_cups INTO :rp, :name, :duplexname, + :hwtype, :hostname, :banner, :location, :contact, :ka, :ac, :prtype; + if (sqlca.sqlcode) + break; + + strtrim(rp); + strtrim(name); + strtrim(duplexname); + strtrim(hwtype); + strtrim(hostname); + strtrim(location); + strtrim(contact); + strcpy(lowerhwtype, hwtype); + for (p = lowerhwtype; *p; p++) + *p = tolower(*p); + for (p = name;*p;p++) + *p = tolower(*p); + for (p = duplexname;*p;p++) + *p = tolower(*p); + + fprintf(out, "%s|%s|%s|%s|%s|%s\n", name,duplexname,hostname,location,hwtype,prtype); + } + EXEC SQL CLOSE csr_cups; + tarfile_end(tf); + tarfile_close(tf); +} + +void sqlerr(void) +{ + db_error(sqlca.sqlcode); +} -- 2.45.1