/* * ns_set_value() sets the passed in kvp in the passed in printer structure, * This is done by converting the value to a string first. */ int ns_set_value(const char *key, const void *value, ns_printer_t *printer) { return (ns_set_value_from_string(key, value_to_string(key, (void *)value), printer)); }
ns_printer_t * _cvt_nss_entry_to_printer(char *entry, char *ns) { char *name = NULL, *key = NULL, **aliases = NULL, *cp, buf[BUFSIZ]; int in_namelist = 1, buf_pos = 0; ns_printer_t *printer = NULL; if (entry == NULL) return (NULL); memset(buf, NULL, sizeof (buf)); for (cp = entry; *cp != NULL; cp++) { switch (*cp) { case ':': /* end of kvp */ if (in_namelist != 0) { if (name == NULL) name = strdup(buf); else aliases = (char **)list_append( (void **)aliases, (void *)strdup(buf)); printer = (ns_printer_t *)ns_printer_create( name, aliases, ns, NULL); in_namelist = 0; } else if (key != NULL) ns_set_value_from_string(key, buf, printer); memset(buf, NULL, sizeof (buf)); buf_pos = 0; key = NULL; break; case '=': /* kvp seperator */ if (key == NULL) { key = strdup(buf); memset(buf, NULL, sizeof (buf)); buf_pos = 0; } else buf[buf_pos++] = *cp; break; case '|': /* namelist seperator */ if (in_namelist != 0) { if (name == NULL) name = strdup(buf); else aliases = (char **)list_append( (void **)aliases, (void *)strdup(buf)); memset(buf, NULL, sizeof (buf)); buf_pos = 0; } else /* add it to the buffer */ buf[buf_pos++] = *cp; break; case '\\': /* escape char */ buf[buf_pos++] = *(++cp); break; default: buf[buf_pos++] = *cp; } } if (key != NULL) ns_set_value_from_string(key, buf, printer); return (printer); }
int _updateoldyp( const char *action, const char *printername, const char *printserver, const char *extensions, const char *comment, const char *isdefault) { ns_printer_t *printer; ns_bsd_addr_t *addr; int status = 0; char mkcmd[BUFSIZ]; char *domain = NULL; char *host = NULL; /* * libprint returns before we know that the printers.conf * map is made. So we'll make it again. */ (void) yp_get_default_domain(&domain); if ((yp_master(domain, "printers.conf.byname", &host) != 0) && (yp_master(domain, "passwd.byname", &host) != 0)) { strcpy(mkcmd, "/usr/bin/sleep 1"); } else { sprintf(mkcmd, "/usr/bin/rsh -n %s 'cd /var/yp; " "/usr/ccs/bin/make -f /var/yp/Makefile " "-f /var/yp/Makefile.print printers.conf " "> /dev/null'", host); } if (strcmp(action, "delete") == 0) { if ((printer = (ns_printer_t *) ns_printer_get_name(printername, "nis")) == NULL) { return (0); } printer->attributes = NULL; status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } if ((printer = (ns_printer_t *) ns_printer_get_name("_default", "nis")) != NULL) { char *dflt = (char *) ns_get_value_string("use", printer); if ((dflt != NULL) && (strcmp(dflt, printername) == 0)) { printer->attributes = NULL; status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } } } (void) free(printer); (void) system(mkcmd); return (0); } else if (strcmp(action, "add") == 0) { printer = (ns_printer_t *)malloc(sizeof (*printer)); memset(printer, 0, sizeof (*printer)); printer->name = (char *)printername; printer->source = "nis"; addr = (ns_bsd_addr_t *)malloc(sizeof (*addr)); memset(addr, 0, sizeof (*addr)); addr->printer = (char *)printername; addr->server = (char *)printserver; if ((extensions != NULL) && (strlen(extensions) > 0)) { addr->extension = (char *)extensions; } ns_set_value("bsdaddr", addr, printer); if ((comment != NULL) && (strlen(comment) > 0)) { ns_set_value_from_string("description", comment, printer); } status = ns_printer_put(printer); if (status != 0) { (void) free(addr); (void) free(printer); return (status); } if (strcmp(isdefault, "true") == 0) { printer->name = "_default"; printer->attributes = NULL; ns_set_value_from_string("use", printername, printer); status = ns_printer_put(printer); if (status != 0) { (void) free(addr); (void) free(printer); return (status); } } (void) free(addr); (void) free(printer); (void) system(mkcmd); return (0); } /* * Modify */ if ((printer = (ns_printer_t *) ns_printer_get_name(printername, "nis")) == NULL) { return (1); } if ((comment != NULL) && (strlen(comment) > 0)) { ns_set_value_from_string("description", comment, printer); } else { ns_set_value_from_string("description", NULL, printer); } status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } if ((printer = (ns_printer_t *) ns_printer_get_name("_default", "nis")) != NULL) { char *dflt = (char *)ns_get_value_string("use", printer); if (strcmp(printername, dflt) == 0) { if (strcmp(isdefault, "false") == 0) { /* * We were the default printer but not * any more. */ printer->attributes = NULL; status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } } } else { if (strcmp(isdefault, "true") == 0) { ns_set_value_from_string("use", printername, printer); status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } } } } else { printer = (ns_printer_t *)malloc(sizeof (*printer)); memset(printer, 0, sizeof (*printer)); printer->name = "_default"; printer->source = "nis"; ns_set_value_from_string("use", printername, printer); status = ns_printer_put(printer); if (status != 0) { (void) free(printer); return (status); } } (void) system(mkcmd); return (0); }