示例#1
0
文件: vlp.c 项目: 0x24bin/winexe-1
static int print_command(int argc, char **argv)
{
	char *printer;
	fstring keystr;
	struct passwd *pw;
	TDB_DATA value, queue;
	struct vlp_job job;

	if (argc < 3) {
		printf("Usage: print <printername> <jobname>\n");
		return 1;
	}

	printer = argv[1];

	ZERO_STRUCT(job);

	/* Create a job record */

	slprintf(job.jobname, sizeof(job.jobname) - 1, "%s", argv[2]);

	if (!(pw = getpwuid(getuid()))) {
		return 1;
	}

	slprintf(job.owner, sizeof(job.owner) - 1, "%s", pw->pw_name);

	job.jobid = next_jobnum(printer);
	job.size = 666;
	job.submit_time = time(NULL);

	/* Store job entry in queue */

	slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer);

	value = tdb_fetch_bystring(tdb, keystr);

	if (value.dptr) {

		/* Add job to end of queue */

		queue.dptr = (unsigned char *)malloc(value.dsize + sizeof(struct vlp_job));
		if (!queue.dptr) return 1;

		memcpy(queue.dptr, value.dptr, value.dsize);
		memcpy(queue.dptr + value.dsize, &job, sizeof(struct vlp_job));

		queue.dsize = value.dsize + sizeof(struct vlp_job);

		tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE);

		free(queue.dptr);

	} else {

		/* Create new queue */
		queue.dptr = (unsigned char *)&job;
		queue.dsize = sizeof(struct vlp_job);

		tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE);
	}

	return 0;
}
示例#2
0
文件: vlp.c 项目: GunioRobot/rtn56u
static int print_command(int argc, char **argv)
{
	char *printer;
	fstring keystr;
	struct passwd *pw;
	TDB_DATA value;
	struct vlp_job job;
	int i;

	if (argc < 3) {
		printf("Usage: print <printername> <jobname>\n");
		return 1;
	}

	printer = argv[1];

	ZERO_STRUCT(job);

	/* Create a job record */

	for (i = 2; i < argc; i++) {
		fstrcat(job.jobname, argv[i]);
		if (i < argc - 1) {
			fstrcat(job.jobname, " ");
		}
	}

	if (!(pw = sys_getpwuid(getuid()))) {
		return 1;
	}

	fstrcpy(job.owner, pw->pw_name);

	job.jobid = next_jobnum(printer);
	job.size = 666;
	job.submit_time = time(NULL);

	/* Store job entry in queue */

	slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer);
	
	value = tdb_fetch_by_string(tdb, keystr);

	if (value.dptr) {

		/* Add job to end of queue */

		value.dptr = realloc(value.dptr, value.dsize + 
				     sizeof(struct vlp_job));
		if (!value.dptr) return 1;

		memcpy(value.dptr + value.dsize, &job, sizeof(struct vlp_job));

		tdb_store_by_string(tdb, keystr, value.dptr, value.dsize +
				    sizeof(struct vlp_job));

		free(value.dptr);

	} else {
		
		/* Create new queue */

		tdb_store_by_string(tdb, keystr, &job, sizeof(struct vlp_job));
	}		

	return 0;
}