xref: /titanic_53/usr/src/lib/libsmbfs/smb/print.c (revision 9c9af2590af49bb395bc8d2eace0f2d4ea16d165)
14bff34e3Sthurlow /*
24bff34e3Sthurlow  * Copyright (c) 2000, Boris Popov
34bff34e3Sthurlow  * All rights reserved.
44bff34e3Sthurlow  *
54bff34e3Sthurlow  * Redistribution and use in source and binary forms, with or without
64bff34e3Sthurlow  * modification, are permitted provided that the following conditions
74bff34e3Sthurlow  * are met:
84bff34e3Sthurlow  * 1. Redistributions of source code must retain the above copyright
94bff34e3Sthurlow  *    notice, this list of conditions and the following disclaimer.
104bff34e3Sthurlow  * 2. Redistributions in binary form must reproduce the above copyright
114bff34e3Sthurlow  *    notice, this list of conditions and the following disclaimer in the
124bff34e3Sthurlow  *    documentation and/or other materials provided with the distribution.
134bff34e3Sthurlow  * 3. All advertising materials mentioning features or use of this software
144bff34e3Sthurlow  *    must display the following acknowledgement:
154bff34e3Sthurlow  *    This product includes software developed by Boris Popov.
164bff34e3Sthurlow  * 4. Neither the name of the author nor the names of any co-contributors
174bff34e3Sthurlow  *    may be used to endorse or promote products derived from this software
184bff34e3Sthurlow  *    without specific prior written permission.
194bff34e3Sthurlow  *
204bff34e3Sthurlow  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
214bff34e3Sthurlow  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
224bff34e3Sthurlow  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
234bff34e3Sthurlow  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
244bff34e3Sthurlow  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
254bff34e3Sthurlow  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
264bff34e3Sthurlow  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
274bff34e3Sthurlow  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
284bff34e3Sthurlow  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
294bff34e3Sthurlow  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
304bff34e3Sthurlow  * SUCH DAMAGE.
314bff34e3Sthurlow  *
324bff34e3Sthurlow  * $Id: print.c,v 1.1.1.3 2001/07/06 22:38:43 conrad Exp $
334bff34e3Sthurlow  */
344bff34e3Sthurlow 
354bff34e3Sthurlow #include <sys/param.h>
364bff34e3Sthurlow #include <sys/ioctl.h>
374bff34e3Sthurlow #include <sys/time.h>
384bff34e3Sthurlow #include <sys/mount.h>
394bff34e3Sthurlow #include <fcntl.h>
404bff34e3Sthurlow #include <ctype.h>
414bff34e3Sthurlow #include <errno.h>
424bff34e3Sthurlow #include <stdio.h>
434bff34e3Sthurlow #include <string.h>
444bff34e3Sthurlow #include <stdlib.h>
454bff34e3Sthurlow #include <pwd.h>
464bff34e3Sthurlow #include <grp.h>
474bff34e3Sthurlow #include <unistd.h>
484bff34e3Sthurlow 
494bff34e3Sthurlow #include <netsmb/smb_lib.h>
504bff34e3Sthurlow #include <cflib.h>
51*9c9af259SGordon Ross #include "private.h"
524bff34e3Sthurlow 
534bff34e3Sthurlow int
544bff34e3Sthurlow smb_smb_open_print_file(struct smb_ctx *ctx, int setuplen, int mode,
554bff34e3Sthurlow 	const char *ident, smbfh *fhp)
564bff34e3Sthurlow {
574bff34e3Sthurlow 	struct smb_rq *rqp;
584bff34e3Sthurlow 	struct mbdata *mbp;
594bff34e3Sthurlow 	int error;
604bff34e3Sthurlow 
614bff34e3Sthurlow 	error = smb_rq_init(ctx, SMB_COM_OPEN_PRINT_FILE, 2, &rqp);
624bff34e3Sthurlow 	if (error)
634bff34e3Sthurlow 		return (error);
644bff34e3Sthurlow 	mbp = smb_rq_getrequest(rqp);
654bff34e3Sthurlow 	mb_put_uint16le(mbp, setuplen);
664bff34e3Sthurlow 	mb_put_uint16le(mbp, mode);
674bff34e3Sthurlow 	smb_rq_wend(rqp);
684bff34e3Sthurlow 	mb_put_uint8(mbp, SMB_DT_ASCII);
694bff34e3Sthurlow 	smb_rq_dstring(mbp, ident);
704bff34e3Sthurlow 	error = smb_rq_simple(rqp);
714bff34e3Sthurlow 	if (!error) {
724bff34e3Sthurlow 		mbp = smb_rq_getreply(rqp);
734bff34e3Sthurlow 		mb_get_uint16(mbp, fhp);
744bff34e3Sthurlow 	}
754bff34e3Sthurlow 	smb_rq_done(rqp);
764bff34e3Sthurlow 	return (error);
774bff34e3Sthurlow }
784bff34e3Sthurlow 
794bff34e3Sthurlow int
804bff34e3Sthurlow smb_smb_close_print_file(struct smb_ctx *ctx, smbfh fh)
814bff34e3Sthurlow {
824bff34e3Sthurlow 	struct smb_rq *rqp;
834bff34e3Sthurlow 	struct mbdata *mbp;
844bff34e3Sthurlow 	int error;
854bff34e3Sthurlow 
864bff34e3Sthurlow 	error = smb_rq_init(ctx, SMB_COM_CLOSE_PRINT_FILE, 0, &rqp);
874bff34e3Sthurlow 	if (error)
884bff34e3Sthurlow 		return (error);
894bff34e3Sthurlow 	mbp = smb_rq_getrequest(rqp);
904bff34e3Sthurlow 	mb_put_mem(mbp, (char *)&fh, 2);
914bff34e3Sthurlow 	smb_rq_wend(rqp);
924bff34e3Sthurlow 	error = smb_rq_simple(rqp);
934bff34e3Sthurlow 	smb_rq_done(rqp);
944bff34e3Sthurlow 	return (error);
954bff34e3Sthurlow }
96