+++ /dev/null
-/* $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
- * <mit-copyright.h>.
- */
-
-#include <mit-copyright.h>
-#include <moira.h>
-#include <moira_site.h>
-
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <time.h>
-#ifdef HAVE_KRB4
-#include <krb.h>
-#endif
-#include <krb5.h>
-
-#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|%s\n", name,duplexname,hostname,location,hwtype,prtype,rp);
- }
- 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);
-}