/* $Id: lpcaccess.pc,v 1.1 2008-07-10 16:58:40 zacheiss Exp $ */

#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 "util.h"

EXEC SQL INCLUDE sqlca;

char *whoami = "lpcaccess.gen";
char *db = "moira/moira";

void sqlerr(void);

int main(int argc, char **argv)
{
  EXEC SQL BEGIN DECLARE SECTION;
  char name[PRINTERS_RP_SIZE], duplexname[PRINTERS_DUPLEXNAME_SIZE];
  int lpc_acl, list_id;
  EXEC SQL END DECLARE SECTION;
  TARFILE *tf;
  FILE *out;
  char filename[MAXPATHLEN];
  time_t mtime, now = time(NULL);

  init_acls();

  EXEC SQL CONNECT :db;

  EXEC SQL WHENEVER SQLERROR DO sqlerr();

  sprintf(filename, "%s/lpcaccess.out", DCM_DIR);
  tf = tarfile_open(filename);

  EXEC SQL SELECT list_id INTO :list_id FROM list
    WHERE name = 'ops-lpcaccess-top';

  out = tarfile_start(tf, "lpcaccess.top", 0755, 1, 1, "daemon", "daemon", 
		      now);
  dump_krb_acl(out, "LIST", list_id, 5);
  tarfile_end(tf);

  EXEC SQL SELECT list_id INTO :list_id FROM LIST
    WHERE name = 'sap-lpcaccess-top';

  out = tarfile_start(tf, "sap-lpcaccess.top", 0755, 1, 1, "daemon", "daemon",
		      now);
  dump_krb_acl(out, "LIST", list_id, 5);
  tarfile_end(tf);

  EXEC SQL DECLARE csr_lpc CURSOR FOR SELECT UNIQUE rp, duplexname, lpc_acl
    FROM printers WHERE lpc_acl != 0;
  EXEC SQL OPEN csr_lpc;
  while (1)
    {
      EXEC SQL FETCH csr_lpc INTO :name, :duplexname, :lpc_acl;
      if (sqlca.sqlcode)
	break;

      strtrim(name);

      tarfile_mkdir(tf, name, 0755, 1, 1, "daemon", "daemon", now);
      sprintf(filename, "%s/lpcaccess", name);
      out = tarfile_start(tf, filename, 0755, 1, 1, "daemon", "daemon", now);
      dump_krb_acl(out, "LIST", lpc_acl, 5);
      tarfile_end(tf);

      if (*duplexname)
	{
	  strtrim(duplexname);

	  tarfile_mkdir(tf, duplexname, 0755, 1, 1, "daemon", "daemon", now);
	  sprintf(filename, "%s/lpcaccess", duplexname);
	  out = tarfile_start(tf, filename, 0755, 1, 1, "daemon", "daemon", now);
	  dump_krb_acl(out, "LIST", lpc_acl, 5);
	  tarfile_end(tf);
	}

    }
  EXEC SQL CLOSE csr_lpc;

  tarfile_close(tf);

  exit(MR_SUCCESS);
}

void sqlerr(void)
{
  db_error(sqlca.sqlcode);
}

