示例#1
0
/*
 * 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));
}
示例#2
0
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);
}
示例#3
0
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);
}