17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate * CDDL HEADER START
37c478bd9Sstevel@tonic-gate *
47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the
545916cd2Sjpk * Common Development and Distribution License (the "License").
645916cd2Sjpk * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate *
87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate * and limitations under the License.
127c478bd9Sstevel@tonic-gate *
137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate *
197c478bd9Sstevel@tonic-gate * CDDL HEADER END
207c478bd9Sstevel@tonic-gate */
217c478bd9Sstevel@tonic-gate /*
22bb698c4dSsonam gupta - Sun Microsystems - Bangalore India * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
2348bbca81SDaniel Hoffman * Copyright (c) 2016 by Delphix. All rights reserved.
247c478bd9Sstevel@tonic-gate */
257c478bd9Sstevel@tonic-gate
26f928ce67Sceastha /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
27f928ce67Sceastha /* All Rights Reserved */
28f928ce67Sceastha
297c478bd9Sstevel@tonic-gate #include "dispatch.h"
307c478bd9Sstevel@tonic-gate #include <sys/types.h>
317c478bd9Sstevel@tonic-gate #include <sys/stat.h>
327c478bd9Sstevel@tonic-gate #include <syslog.h>
337c478bd9Sstevel@tonic-gate
34f928ce67Sceastha static char *reqpath(char *, char **);
35f928ce67Sceastha static int mv_file(RSTATUS *, char *);
367c478bd9Sstevel@tonic-gate
377c478bd9Sstevel@tonic-gate
387c478bd9Sstevel@tonic-gate RSTATUS *NewRequest;
397c478bd9Sstevel@tonic-gate
4018188661Ssonam gupta - Sun Microsystems - Bangalore India /*
4118188661Ssonam gupta - Sun Microsystems - Bangalore India * s_alloc_files()
4218188661Ssonam gupta - Sun Microsystems - Bangalore India */
437c478bd9Sstevel@tonic-gate
4418188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_alloc_files(char * m,MESG * md)4518188661Ssonam gupta - Sun Microsystems - Bangalore India s_alloc_files(char *m, MESG *md) /* funcdef */
467c478bd9Sstevel@tonic-gate {
4718188661Ssonam gupta - Sun Microsystems - Bangalore India char *file_prefix;
4818188661Ssonam gupta - Sun Microsystems - Bangalore India ushort_t count;
4918188661Ssonam gupta - Sun Microsystems - Bangalore India mode_t old_msk;
507c478bd9Sstevel@tonic-gate
517c478bd9Sstevel@tonic-gate
5218188661Ssonam gupta - Sun Microsystems - Bangalore India /*
5318188661Ssonam gupta - Sun Microsystems - Bangalore India * Bugid 4140311
5418188661Ssonam gupta - Sun Microsystems - Bangalore India * Set umask to 0 before creating files.
5518188661Ssonam gupta - Sun Microsystems - Bangalore India */
5618188661Ssonam gupta - Sun Microsystems - Bangalore India old_msk = umask((mode_t)0);
577c478bd9Sstevel@tonic-gate
5818188661Ssonam gupta - Sun Microsystems - Bangalore India getmessage(m, S_ALLOC_FILES, &count);
5918188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_alloc_files(%d)", count);
607c478bd9Sstevel@tonic-gate
6118188661Ssonam gupta - Sun Microsystems - Bangalore India if ((file_prefix = _alloc_files(count, (char *)0, md->uid, md->gid))) {
6218188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_ALLOC_FILES, MOK, file_prefix);
6318188661Ssonam gupta - Sun Microsystems - Bangalore India add_flt_act(md, FLT_FILES, file_prefix, count);
6418188661Ssonam gupta - Sun Microsystems - Bangalore India } else if (errno == EEXIST)
6518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_ALLOC_FILES, MERRDEST, "");
6618188661Ssonam gupta - Sun Microsystems - Bangalore India else
6718188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_ALLOC_FILES, MNOMEM, "");
687c478bd9Sstevel@tonic-gate
6918188661Ssonam gupta - Sun Microsystems - Bangalore India (void) umask(old_msk);
707c478bd9Sstevel@tonic-gate
717c478bd9Sstevel@tonic-gate }
727c478bd9Sstevel@tonic-gate
7318188661Ssonam gupta - Sun Microsystems - Bangalore India /*
7418188661Ssonam gupta - Sun Microsystems - Bangalore India * s_print_request()
7518188661Ssonam gupta - Sun Microsystems - Bangalore India */
767c478bd9Sstevel@tonic-gate
7718188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_print_request(char * m,MESG * md)7818188661Ssonam gupta - Sun Microsystems - Bangalore India s_print_request(char *m, MESG *md)
797c478bd9Sstevel@tonic-gate {
8018188661Ssonam gupta - Sun Microsystems - Bangalore India extern char *Local_System;
8118188661Ssonam gupta - Sun Microsystems - Bangalore India char *file;
8218188661Ssonam gupta - Sun Microsystems - Bangalore India char *idno;
8318188661Ssonam gupta - Sun Microsystems - Bangalore India char *path;
8418188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_file;
8518188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_id = 0;
8618188661Ssonam gupta - Sun Microsystems - Bangalore India RSTATUS *rp;
8718188661Ssonam gupta - Sun Microsystems - Bangalore India REQUEST *r;
8818188661Ssonam gupta - Sun Microsystems - Bangalore India SECURE *s;
8918188661Ssonam gupta - Sun Microsystems - Bangalore India struct passwd *pw;
9018188661Ssonam gupta - Sun Microsystems - Bangalore India short err;
9118188661Ssonam gupta - Sun Microsystems - Bangalore India short status;
9218188661Ssonam gupta - Sun Microsystems - Bangalore India off_t size;
9318188661Ssonam gupta - Sun Microsystems - Bangalore India uid_t org_uid;
9418188661Ssonam gupta - Sun Microsystems - Bangalore India gid_t org_gid;
957c478bd9Sstevel@tonic-gate #ifdef LP_USE_PAPI_ATTR
9618188661Ssonam gupta - Sun Microsystems - Bangalore India struct stat tmpBuf;
9718188661Ssonam gupta - Sun Microsystems - Bangalore India char tmpName[BUFSIZ];
987c478bd9Sstevel@tonic-gate #endif
997c478bd9Sstevel@tonic-gate
1007c478bd9Sstevel@tonic-gate
10118188661Ssonam gupta - Sun Microsystems - Bangalore India (void) getmessage(m, S_PRINT_REQUEST, &file);
10218188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_print_request(%s)", (file ? file : "NULL"));
1037c478bd9Sstevel@tonic-gate
10418188661Ssonam gupta - Sun Microsystems - Bangalore India /*
10518188661Ssonam gupta - Sun Microsystems - Bangalore India * "NewRequest" points to a request that's not yet in the
10618188661Ssonam gupta - Sun Microsystems - Bangalore India * request list but is to be considered with the rest of the
10718188661Ssonam gupta - Sun Microsystems - Bangalore India * requests (e.g. calculating # of requests awaiting a form).
10818188661Ssonam gupta - Sun Microsystems - Bangalore India */
10918188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp = NewRequest = new_rstatus(NULL, NULL)) == NULL)
11018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOMEM;
1117c478bd9Sstevel@tonic-gate
1127c478bd9Sstevel@tonic-gate else
1137c478bd9Sstevel@tonic-gate {
11418188661Ssonam gupta - Sun Microsystems - Bangalore India req_file = reqpath(file, &idno);
11518188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Tmp, req_file, (char *)0);
11618188661Ssonam gupta - Sun Microsystems - Bangalore India (void) chownmod(path, Lp_Uid, Lp_Gid, 0644);
11718188661Ssonam gupta - Sun Microsystems - Bangalore India Free(path);
11818188661Ssonam gupta - Sun Microsystems - Bangalore India
11918188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(r = Getrequest(req_file)))
12018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOOPEN;
12118188661Ssonam gupta - Sun Microsystems - Bangalore India
12218188661Ssonam gupta - Sun Microsystems - Bangalore India else
12318188661Ssonam gupta - Sun Microsystems - Bangalore India {
12418188661Ssonam gupta - Sun Microsystems - Bangalore India rp->req_file = Strdup(req_file);
12518188661Ssonam gupta - Sun Microsystems - Bangalore India
12618188661Ssonam gupta - Sun Microsystems - Bangalore India freerequest(rp->request);
12718188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request = r;
12818188661Ssonam gupta - Sun Microsystems - Bangalore India
12918188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome = 0;
13018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->uid = md->uid;
13118188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->gid = md->gid;
13218188661Ssonam gupta - Sun Microsystems - Bangalore India if (md->slabel != NULL)
13318188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->slabel = Strdup(md->slabel);
13418188661Ssonam gupta - Sun Microsystems - Bangalore India
13518188661Ssonam gupta - Sun Microsystems - Bangalore India pw = getpwuid(md->uid);
13618188661Ssonam gupta - Sun Microsystems - Bangalore India endpwent();
13718188661Ssonam gupta - Sun Microsystems - Bangalore India if (pw && pw->pw_name && *pw->pw_name)
13818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->user = Strdup(pw->pw_name);
13918188661Ssonam gupta - Sun Microsystems - Bangalore India else {
14018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->user = Strdup(BIGGEST_NUMBER_S);
14118188661Ssonam gupta - Sun Microsystems - Bangalore India (void) sprintf(rp->secure->user, "%u",
14218188661Ssonam gupta - Sun Microsystems - Bangalore India md->uid);
14318188661Ssonam gupta - Sun Microsystems - Bangalore India }
14418188661Ssonam gupta - Sun Microsystems - Bangalore India
14518188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL) == ACT_HOLD)
14618188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_HELD;
14718188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL) == ACT_RESUME)
14818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome &= ~RS_HELD;
14918188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL) ==
15018188661Ssonam gupta - Sun Microsystems - Bangalore India ACT_IMMEDIATE) {
15118188661Ssonam gupta - Sun Microsystems - Bangalore India if (!md->admin) {
15218188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
15318188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
15418188661Ssonam gupta - Sun Microsystems - Bangalore India }
15518188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_IMMEDIATE;
15618188661Ssonam gupta - Sun Microsystems - Bangalore India }
15718188661Ssonam gupta - Sun Microsystems - Bangalore India
15818188661Ssonam gupta - Sun Microsystems - Bangalore India size = chfiles(rp->request->file_list, Lp_Uid, Lp_Gid);
15918188661Ssonam gupta - Sun Microsystems - Bangalore India
16018188661Ssonam gupta - Sun Microsystems - Bangalore India if (size < 0) {
16118188661Ssonam gupta - Sun Microsystems - Bangalore India /*
16218188661Ssonam gupta - Sun Microsystems - Bangalore India * at this point, chfiles() may have
16318188661Ssonam gupta - Sun Microsystems - Bangalore India * failed because the file may live on
16418188661Ssonam gupta - Sun Microsystems - Bangalore India * an NFS mounted filesystem, under
16518188661Ssonam gupta - Sun Microsystems - Bangalore India * a directory of mode 700. such a
16618188661Ssonam gupta - Sun Microsystems - Bangalore India * directory isn't accessible even by
16718188661Ssonam gupta - Sun Microsystems - Bangalore India * root, according to the NFS protocol
16818188661Ssonam gupta - Sun Microsystems - Bangalore India * (i.e. the Stat() in chfiles() failed).
16918188661Ssonam gupta - Sun Microsystems - Bangalore India * this most commonly happens via the
17018188661Ssonam gupta - Sun Microsystems - Bangalore India * automounter, and rlogin. thus we
17118188661Ssonam gupta - Sun Microsystems - Bangalore India * change our euid/egid to that of the
17218188661Ssonam gupta - Sun Microsystems - Bangalore India * user, and try again. if *this* fails,
17318188661Ssonam gupta - Sun Microsystems - Bangalore India * then the file must really be
17418188661Ssonam gupta - Sun Microsystems - Bangalore India * inaccessible.
17518188661Ssonam gupta - Sun Microsystems - Bangalore India */
17618188661Ssonam gupta - Sun Microsystems - Bangalore India org_uid = geteuid();
17718188661Ssonam gupta - Sun Microsystems - Bangalore India org_gid = getegid();
17818188661Ssonam gupta - Sun Microsystems - Bangalore India
17918188661Ssonam gupta - Sun Microsystems - Bangalore India if (setegid(md->gid) != 0) {
18018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
18118188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
18218188661Ssonam gupta - Sun Microsystems - Bangalore India }
18318188661Ssonam gupta - Sun Microsystems - Bangalore India
18418188661Ssonam gupta - Sun Microsystems - Bangalore India if (seteuid(md->uid) != 0) {
18518188661Ssonam gupta - Sun Microsystems - Bangalore India setgid(org_gid);
18618188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
18718188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
18818188661Ssonam gupta - Sun Microsystems - Bangalore India }
18918188661Ssonam gupta - Sun Microsystems - Bangalore India
19018188661Ssonam gupta - Sun Microsystems - Bangalore India size = chfiles(rp->request->file_list,
19118188661Ssonam gupta - Sun Microsystems - Bangalore India Lp_Uid, Lp_Gid);
19218188661Ssonam gupta - Sun Microsystems - Bangalore India
19318188661Ssonam gupta - Sun Microsystems - Bangalore India if (seteuid(org_uid) != 0) {
19418188661Ssonam gupta - Sun Microsystems - Bangalore India /* should never happen */
19518188661Ssonam gupta - Sun Microsystems - Bangalore India note("s_print_request(): ");
19618188661Ssonam gupta - Sun Microsystems - Bangalore India note("seteuid back to uid=%d "
19718188661Ssonam gupta - Sun Microsystems - Bangalore India "failed!!\n", org_uid);
19818188661Ssonam gupta - Sun Microsystems - Bangalore India size = -1;
19918188661Ssonam gupta - Sun Microsystems - Bangalore India }
20018188661Ssonam gupta - Sun Microsystems - Bangalore India
20118188661Ssonam gupta - Sun Microsystems - Bangalore India if (setegid(org_gid) != 0) {
20218188661Ssonam gupta - Sun Microsystems - Bangalore India /* should never happen */
20318188661Ssonam gupta - Sun Microsystems - Bangalore India note("s_print_request(): ");
20418188661Ssonam gupta - Sun Microsystems - Bangalore India note("setegid back to uid=%d "
20518188661Ssonam gupta - Sun Microsystems - Bangalore India "failed!!\n", org_uid);
20618188661Ssonam gupta - Sun Microsystems - Bangalore India size = -1;
20718188661Ssonam gupta - Sun Microsystems - Bangalore India }
20818188661Ssonam gupta - Sun Microsystems - Bangalore India
20918188661Ssonam gupta - Sun Microsystems - Bangalore India if (size < 0) {
21018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
21118188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
21218188661Ssonam gupta - Sun Microsystems - Bangalore India }
21318188661Ssonam gupta - Sun Microsystems - Bangalore India }
21418188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(rp->request->outcome & RS_HELD) && size == 0) {
21518188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
21618188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
21718188661Ssonam gupta - Sun Microsystems - Bangalore India }
21818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->size = size;
21918188661Ssonam gupta - Sun Microsystems - Bangalore India
22018188661Ssonam gupta - Sun Microsystems - Bangalore India (void) time(&rp->secure->date);
22118188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->req_id = NULL;
22218188661Ssonam gupta - Sun Microsystems - Bangalore India
22318188661Ssonam gupta - Sun Microsystems - Bangalore India if (!rp->request->title) {
22418188661Ssonam gupta - Sun Microsystems - Bangalore India if (strlen(*rp->request->file_list) <
22518188661Ssonam gupta - Sun Microsystems - Bangalore India (size_t)24)
22618188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->title =
22718188661Ssonam gupta - Sun Microsystems - Bangalore India Strdup(*rp->request->file_list);
22818188661Ssonam gupta - Sun Microsystems - Bangalore India else {
229bb698c4dSsonam gupta - Sun Microsystems - Bangalore India char *r;
230bb698c4dSsonam gupta - Sun Microsystems - Bangalore India if (r = strrchr(
231bb698c4dSsonam gupta - Sun Microsystems - Bangalore India *rp->request->file_list, '/'))
232bb698c4dSsonam gupta - Sun Microsystems - Bangalore India r++;
233bb698c4dSsonam gupta - Sun Microsystems - Bangalore India else
234bb698c4dSsonam gupta - Sun Microsystems - Bangalore India r = *rp->request->file_list;
235bb698c4dSsonam gupta - Sun Microsystems - Bangalore India
23618188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->title = malloc(25);
23718188661Ssonam gupta - Sun Microsystems - Bangalore India sprintf(rp->request->title,
238bb698c4dSsonam gupta - Sun Microsystems - Bangalore India "%-.24s", r);
23918188661Ssonam gupta - Sun Microsystems - Bangalore India }
24018188661Ssonam gupta - Sun Microsystems - Bangalore India }
24118188661Ssonam gupta - Sun Microsystems - Bangalore India
24218188661Ssonam gupta - Sun Microsystems - Bangalore India if ((err = validate_request(rp, &req_id, 0)) != MOK)
24318188661Ssonam gupta - Sun Microsystems - Bangalore India status = err;
24418188661Ssonam gupta - Sun Microsystems - Bangalore India else {
24518188661Ssonam gupta - Sun Microsystems - Bangalore India /*
24618188661Ssonam gupta - Sun Microsystems - Bangalore India * "req_id" will be supplied if this is from a
24718188661Ssonam gupta - Sun Microsystems - Bangalore India * remote system.
24818188661Ssonam gupta - Sun Microsystems - Bangalore India */
24918188661Ssonam gupta - Sun Microsystems - Bangalore India if (rp->secure->req_id == NULL) {
25018188661Ssonam gupta - Sun Microsystems - Bangalore India req_id = makestr(req_id, "-",
25118188661Ssonam gupta - Sun Microsystems - Bangalore India idno, (char *)0);
25218188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->req_id = req_id;
25318188661Ssonam gupta - Sun Microsystems - Bangalore India } else
25418188661Ssonam gupta - Sun Microsystems - Bangalore India req_id = rp->secure->req_id;
25518188661Ssonam gupta - Sun Microsystems - Bangalore India
25618188661Ssonam gupta - Sun Microsystems - Bangalore India #ifdef LP_USE_PAPI_ATTR
25718188661Ssonam gupta - Sun Microsystems - Bangalore India /*
25818188661Ssonam gupta - Sun Microsystems - Bangalore India * Check if the PAPI job attribute file
25918188661Ssonam gupta - Sun Microsystems - Bangalore India * exists, if it does change the
26018188661Ssonam gupta - Sun Microsystems - Bangalore India * permissions and ownership of the file.
26118188661Ssonam gupta - Sun Microsystems - Bangalore India * This file is created when print jobs
26218188661Ssonam gupta - Sun Microsystems - Bangalore India * are submitted via the PAPI interface,
26318188661Ssonam gupta - Sun Microsystems - Bangalore India * the file pathname of this file is
26418188661Ssonam gupta - Sun Microsystems - Bangalore India * passed to the slow-filters and printer
26518188661Ssonam gupta - Sun Microsystems - Bangalore India * interface script as an environment
26618188661Ssonam gupta - Sun Microsystems - Bangalore India * variable when they are executed
26718188661Ssonam gupta - Sun Microsystems - Bangalore India */
26818188661Ssonam gupta - Sun Microsystems - Bangalore India snprintf(tmpName, sizeof (tmpName),
26918188661Ssonam gupta - Sun Microsystems - Bangalore India "%s-%s", idno, LP_PAPIATTRNAME);
27018188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Temp, tmpName, (char *)0);
27118188661Ssonam gupta - Sun Microsystems - Bangalore India
27218188661Ssonam gupta - Sun Microsystems - Bangalore India if (stat(path, &tmpBuf) == 0) {
27318188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG,
27418188661Ssonam gupta - Sun Microsystems - Bangalore India "s_print_request: "\
27518188661Ssonam gupta - Sun Microsystems - Bangalore India "attribute file ='%s'", path);
27618188661Ssonam gupta - Sun Microsystems - Bangalore India
27718188661Ssonam gupta - Sun Microsystems - Bangalore India /*
27818188661Ssonam gupta - Sun Microsystems - Bangalore India * IPP job attribute file exists
27918188661Ssonam gupta - Sun Microsystems - Bangalore India * for this job so change
28018188661Ssonam gupta - Sun Microsystems - Bangalore India * permissions and ownership of
28118188661Ssonam gupta - Sun Microsystems - Bangalore India * the file
28218188661Ssonam gupta - Sun Microsystems - Bangalore India */
28318188661Ssonam gupta - Sun Microsystems - Bangalore India (void) chownmod(path, Lp_Uid,
28418188661Ssonam gupta - Sun Microsystems - Bangalore India Lp_Gid, 0644);
28518188661Ssonam gupta - Sun Microsystems - Bangalore India Free(path);
28618188661Ssonam gupta - Sun Microsystems - Bangalore India }
28718188661Ssonam gupta - Sun Microsystems - Bangalore India else
28818188661Ssonam gupta - Sun Microsystems - Bangalore India {
28918188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG,
29018188661Ssonam gupta - Sun Microsystems - Bangalore India "s_print_request: "\
29118188661Ssonam gupta - Sun Microsystems - Bangalore India "no attribute file");
29218188661Ssonam gupta - Sun Microsystems - Bangalore India }
29318188661Ssonam gupta - Sun Microsystems - Bangalore India #endif
29418188661Ssonam gupta - Sun Microsystems - Bangalore India
29518188661Ssonam gupta - Sun Microsystems - Bangalore India /*
29618188661Ssonam gupta - Sun Microsystems - Bangalore India * fix for bugid 1103890.
29718188661Ssonam gupta - Sun Microsystems - Bangalore India * use Putsecure instead.
29818188661Ssonam gupta - Sun Microsystems - Bangalore India */
29918188661Ssonam gupta - Sun Microsystems - Bangalore India if ((Putsecure(req_file, rp->secure) == -1) ||
30018188661Ssonam gupta - Sun Microsystems - Bangalore India (putrequest(req_file, rp->request) == -1))
30118188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOMEM;
30218188661Ssonam gupta - Sun Microsystems - Bangalore India else
30318188661Ssonam gupta - Sun Microsystems - Bangalore India {
30418188661Ssonam gupta - Sun Microsystems - Bangalore India status = MOK;
30518188661Ssonam gupta - Sun Microsystems - Bangalore India
30618188661Ssonam gupta - Sun Microsystems - Bangalore India insertr(rp);
30718188661Ssonam gupta - Sun Microsystems - Bangalore India NewRequest = 0;
30818188661Ssonam gupta - Sun Microsystems - Bangalore India
30918188661Ssonam gupta - Sun Microsystems - Bangalore India if (rp->slow)
31018188661Ssonam gupta - Sun Microsystems - Bangalore India schedule(EV_SLOWF, rp);
31118188661Ssonam gupta - Sun Microsystems - Bangalore India else
31218188661Ssonam gupta - Sun Microsystems - Bangalore India schedule(EV_INTERF,
31318188661Ssonam gupta - Sun Microsystems - Bangalore India rp->printer);
31418188661Ssonam gupta - Sun Microsystems - Bangalore India
31518188661Ssonam gupta - Sun Microsystems - Bangalore India del_flt_act(md, FLT_FILES);
31618188661Ssonam gupta - Sun Microsystems - Bangalore India }
31718188661Ssonam gupta - Sun Microsystems - Bangalore India }
31818188661Ssonam gupta - Sun Microsystems - Bangalore India }
31918188661Ssonam gupta - Sun Microsystems - Bangalore India }
32018188661Ssonam gupta - Sun Microsystems - Bangalore India
32118188661Ssonam gupta - Sun Microsystems - Bangalore India Return:
32218188661Ssonam gupta - Sun Microsystems - Bangalore India NewRequest = 0;
32318188661Ssonam gupta - Sun Microsystems - Bangalore India Free(req_file);
32418188661Ssonam gupta - Sun Microsystems - Bangalore India Free(idno);
32518188661Ssonam gupta - Sun Microsystems - Bangalore India if (status != MOK && rp) {
32618188661Ssonam gupta - Sun Microsystems - Bangalore India rmfiles(rp, 0);
32718188661Ssonam gupta - Sun Microsystems - Bangalore India free_rstatus(rp);
32818188661Ssonam gupta - Sun Microsystems - Bangalore India }
32918188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_PRINT_REQUEST, status, NB(req_id), chkprinter_result);
33018188661Ssonam gupta - Sun Microsystems - Bangalore India }
33118188661Ssonam gupta - Sun Microsystems - Bangalore India
33218188661Ssonam gupta - Sun Microsystems - Bangalore India /*
33318188661Ssonam gupta - Sun Microsystems - Bangalore India * s_start_change_request()
33418188661Ssonam gupta - Sun Microsystems - Bangalore India */
33518188661Ssonam gupta - Sun Microsystems - Bangalore India
33618188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_start_change_request(char * m,MESG * md)33718188661Ssonam gupta - Sun Microsystems - Bangalore India s_start_change_request(char *m, MESG *md)
33818188661Ssonam gupta - Sun Microsystems - Bangalore India {
33918188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_id;
34018188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_file = "";
34118188661Ssonam gupta - Sun Microsystems - Bangalore India short status;
34218188661Ssonam gupta - Sun Microsystems - Bangalore India RSTATUS *rp;
34318188661Ssonam gupta - Sun Microsystems - Bangalore India char *path;
34418188661Ssonam gupta - Sun Microsystems - Bangalore India char tmpName[BUFSIZ];
34518188661Ssonam gupta - Sun Microsystems - Bangalore India struct stat tmpBuf;
34618188661Ssonam gupta - Sun Microsystems - Bangalore India
34718188661Ssonam gupta - Sun Microsystems - Bangalore India (void) getmessage(m, S_START_CHANGE_REQUEST, &req_id);
34818188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_start_change_request(%s)",
34918188661Ssonam gupta - Sun Microsystems - Bangalore India (req_id ? req_id : "NULL"));
35018188661Ssonam gupta - Sun Microsystems - Bangalore India
35118188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(rp = request_by_id(req_id)))
35218188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
35318188661Ssonam gupta - Sun Microsystems - Bangalore India else if ((md->admin == 0) && (is_system_labeled()) &&
35418188661Ssonam gupta - Sun Microsystems - Bangalore India (md->slabel != NULL) && (rp->secure->slabel != NULL) &&
35518188661Ssonam gupta - Sun Microsystems - Bangalore India (!STREQU(md->slabel, rp->secure->slabel)))
35618188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
35718188661Ssonam gupta - Sun Microsystems - Bangalore India else if (rp->request->outcome & RS_DONE)
35818188661Ssonam gupta - Sun Microsystems - Bangalore India status = M2LATE;
35918188661Ssonam gupta - Sun Microsystems - Bangalore India else if (!md->admin && md->uid != rp->secure->uid)
36018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
36118188661Ssonam gupta - Sun Microsystems - Bangalore India else if (rp->request->outcome & RS_CHANGING)
36218188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOOPEN;
36318188661Ssonam gupta - Sun Microsystems - Bangalore India else if (rp->request->outcome & RS_NOTIFYING)
36418188661Ssonam gupta - Sun Microsystems - Bangalore India status = MBUSY;
36518188661Ssonam gupta - Sun Microsystems - Bangalore India else {
36618188661Ssonam gupta - Sun Microsystems - Bangalore India status = MOK;
36718188661Ssonam gupta - Sun Microsystems - Bangalore India
36818188661Ssonam gupta - Sun Microsystems - Bangalore India if (rp->request->outcome & RS_FILTERING &&
36918188661Ssonam gupta - Sun Microsystems - Bangalore India !(rp->request->outcome & RS_STOPPED)) {
37018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= (RS_REFILTER|RS_STOPPED);
37118188661Ssonam gupta - Sun Microsystems - Bangalore India terminate(rp->exec);
37218188661Ssonam gupta - Sun Microsystems - Bangalore India }
37318188661Ssonam gupta - Sun Microsystems - Bangalore India
37418188661Ssonam gupta - Sun Microsystems - Bangalore India if (rp->request->outcome & RS_PRINTING &&
37518188661Ssonam gupta - Sun Microsystems - Bangalore India !(rp->request->outcome & RS_STOPPED)) {
37618188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_STOPPED;
37718188661Ssonam gupta - Sun Microsystems - Bangalore India terminate(rp->printer->exec);
3787c478bd9Sstevel@tonic-gate }
3797c478bd9Sstevel@tonic-gate
38018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_CHANGING;
38118188661Ssonam gupta - Sun Microsystems - Bangalore India
3827c478bd9Sstevel@tonic-gate /*
38318188661Ssonam gupta - Sun Microsystems - Bangalore India * Change the ownership of the request file to be "md->uid".
38418188661Ssonam gupta - Sun Microsystems - Bangalore India * Either this is identical to "rp->secure->uid", or it is
38518188661Ssonam gupta - Sun Microsystems - Bangalore India * "Lp_Uid" or it is root. The idea is that the
38618188661Ssonam gupta - Sun Microsystems - Bangalore India * person at the other end needs access, and that may not
38718188661Ssonam gupta - Sun Microsystems - Bangalore India * be who queued the request.
3887c478bd9Sstevel@tonic-gate */
38918188661Ssonam gupta - Sun Microsystems - Bangalore India
39018188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Tmp, rp->req_file, (char *)0);
39118188661Ssonam gupta - Sun Microsystems - Bangalore India (void) Chown(path, md->uid, rp->secure->gid);
39218188661Ssonam gupta - Sun Microsystems - Bangalore India Free(path);
3937c478bd9Sstevel@tonic-gate
3947c478bd9Sstevel@tonic-gate #ifdef LP_USE_PAPI_ATTR
39518188661Ssonam gupta - Sun Microsystems - Bangalore India
3967c478bd9Sstevel@tonic-gate /*
3977c478bd9Sstevel@tonic-gate * Check if the PAPI job attribute file exists, if it does
39818188661Ssonam gupta - Sun Microsystems - Bangalore India * change the ownership of the file to be "md->uid".
39918188661Ssonam gupta - Sun Microsystems - Bangalore India * Either this is identical to "rp->secure->uid", or it is
40018188661Ssonam gupta - Sun Microsystems - Bangalore India * "Lp_Uid" or it is root. The idea is that the
40118188661Ssonam gupta - Sun Microsystems - Bangalore India * person at the other end needs access, and that may not
40218188661Ssonam gupta - Sun Microsystems - Bangalore India * be who queued the request.
4037c478bd9Sstevel@tonic-gate */
40418188661Ssonam gupta - Sun Microsystems - Bangalore India
4057c478bd9Sstevel@tonic-gate snprintf(tmpName, sizeof (tmpName),
40618188661Ssonam gupta - Sun Microsystems - Bangalore India "%s-%s", strtok(strdup(rp->req_file), "-"),
40718188661Ssonam gupta - Sun Microsystems - Bangalore India LP_PAPIATTRNAME);
4087c478bd9Sstevel@tonic-gate
40918188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Tmp, tmpName, (char *)0);
41018188661Ssonam gupta - Sun Microsystems - Bangalore India
41118188661Ssonam gupta - Sun Microsystems - Bangalore India if (stat(path, &tmpBuf) == 0) {
4127c478bd9Sstevel@tonic-gate syslog(LOG_DEBUG,
41318188661Ssonam gupta - Sun Microsystems - Bangalore India "s_start_change_request: attribute file ='%s'",
41418188661Ssonam gupta - Sun Microsystems - Bangalore India path);
4157c478bd9Sstevel@tonic-gate
4167c478bd9Sstevel@tonic-gate /*
4177c478bd9Sstevel@tonic-gate * IPP job attribute file exists for this job so
4187c478bd9Sstevel@tonic-gate * change permissions and ownership of the file
4197c478bd9Sstevel@tonic-gate */
42018188661Ssonam gupta - Sun Microsystems - Bangalore India (void) Chown(path, md->uid, rp->secure->gid);
4217c478bd9Sstevel@tonic-gate Free(path);
4227c478bd9Sstevel@tonic-gate }
4237c478bd9Sstevel@tonic-gate else
4247c478bd9Sstevel@tonic-gate {
42518188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG,
42618188661Ssonam gupta - Sun Microsystems - Bangalore India "s_start_change_request: no attribute file");
4277c478bd9Sstevel@tonic-gate }
4287c478bd9Sstevel@tonic-gate #endif
4297c478bd9Sstevel@tonic-gate
43018188661Ssonam gupta - Sun Microsystems - Bangalore India add_flt_act(md, FLT_CHANGE, rp);
43118188661Ssonam gupta - Sun Microsystems - Bangalore India req_file = rp->req_file;
4327c478bd9Sstevel@tonic-gate
4337c478bd9Sstevel@tonic-gate }
4347c478bd9Sstevel@tonic-gate
43518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_START_CHANGE_REQUEST, status, req_file);
4367c478bd9Sstevel@tonic-gate }
4377c478bd9Sstevel@tonic-gate
43818188661Ssonam gupta - Sun Microsystems - Bangalore India /*
43918188661Ssonam gupta - Sun Microsystems - Bangalore India * s_end_change_request()
44018188661Ssonam gupta - Sun Microsystems - Bangalore India */
4417c478bd9Sstevel@tonic-gate
44218188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_end_change_request(char * m,MESG * md)44318188661Ssonam gupta - Sun Microsystems - Bangalore India s_end_change_request(char *m, MESG *md)
4447c478bd9Sstevel@tonic-gate {
44518188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_id;
44618188661Ssonam gupta - Sun Microsystems - Bangalore India RSTATUS *rp;
44718188661Ssonam gupta - Sun Microsystems - Bangalore India off_t size;
44818188661Ssonam gupta - Sun Microsystems - Bangalore India off_t osize;
44918188661Ssonam gupta - Sun Microsystems - Bangalore India short err;
45018188661Ssonam gupta - Sun Microsystems - Bangalore India short status;
45118188661Ssonam gupta - Sun Microsystems - Bangalore India REQUEST *r = 0;
45218188661Ssonam gupta - Sun Microsystems - Bangalore India REQUEST oldr;
45318188661Ssonam gupta - Sun Microsystems - Bangalore India int call_schedule = 0;
45418188661Ssonam gupta - Sun Microsystems - Bangalore India int move_ok = 0;
45518188661Ssonam gupta - Sun Microsystems - Bangalore India char *path;
45618188661Ssonam gupta - Sun Microsystems - Bangalore India char tmpName[BUFSIZ];
45718188661Ssonam gupta - Sun Microsystems - Bangalore India struct stat tmpBuf;
45818188661Ssonam gupta - Sun Microsystems - Bangalore India
45918188661Ssonam gupta - Sun Microsystems - Bangalore India (void) getmessage(m, S_END_CHANGE_REQUEST, &req_id);
46018188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_end_change_request(%s)",
46118188661Ssonam gupta - Sun Microsystems - Bangalore India (req_id ? req_id : "NULL"));
46218188661Ssonam gupta - Sun Microsystems - Bangalore India
46318188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(rp = request_by_id(req_id)))
46418188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
46518188661Ssonam gupta - Sun Microsystems - Bangalore India else if ((md->admin == 0) && (is_system_labeled()) &&
46645916cd2Sjpk (md->slabel != NULL) && (rp->secure->slabel != NULL) &&
46745916cd2Sjpk (!STREQU(md->slabel, rp->secure->slabel)))
46818188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
46918188661Ssonam gupta - Sun Microsystems - Bangalore India else if (!(rp->request->outcome & RS_CHANGING))
47018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOSTART;
47118188661Ssonam gupta - Sun Microsystems - Bangalore India else {
47218188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Tmp, rp->req_file, (char *)0);
47318188661Ssonam gupta - Sun Microsystems - Bangalore India (void) chownmod(path, Lp_Uid, Lp_Gid, 0644);
47418188661Ssonam gupta - Sun Microsystems - Bangalore India Free(path);
4755a00db9dSsonam gupta - Sun Microsystems - Bangalore India
4765a00db9dSsonam gupta - Sun Microsystems - Bangalore India #ifdef LP_USE_PAPI_ATTR
4775a00db9dSsonam gupta - Sun Microsystems - Bangalore India
4785a00db9dSsonam gupta - Sun Microsystems - Bangalore India /*
47918188661Ssonam gupta - Sun Microsystems - Bangalore India * Check if the PAPI job attribute file exists,
48018188661Ssonam gupta - Sun Microsystems - Bangalore India * if it does change the permission and the ownership
48118188661Ssonam gupta - Sun Microsystems - Bangalore India * of the file to be "Lp_Uid".
4825a00db9dSsonam gupta - Sun Microsystems - Bangalore India */
4837c478bd9Sstevel@tonic-gate
48418188661Ssonam gupta - Sun Microsystems - Bangalore India snprintf(tmpName, sizeof (tmpName),
48518188661Ssonam gupta - Sun Microsystems - Bangalore India "%s-%s", strtok(strdup(rp->req_file), "-"),
48618188661Ssonam gupta - Sun Microsystems - Bangalore India LP_PAPIATTRNAME);
4877c478bd9Sstevel@tonic-gate
48818188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Lp_Tmp, tmpName, (char *)0);
4897c478bd9Sstevel@tonic-gate
49018188661Ssonam gupta - Sun Microsystems - Bangalore India if (stat(path, &tmpBuf) == 0) {
49118188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG,
49218188661Ssonam gupta - Sun Microsystems - Bangalore India "s_end_change_request: attribute file ='%s'",
49318188661Ssonam gupta - Sun Microsystems - Bangalore India path);
4945a00db9dSsonam gupta - Sun Microsystems - Bangalore India
49518188661Ssonam gupta - Sun Microsystems - Bangalore India /*
49618188661Ssonam gupta - Sun Microsystems - Bangalore India * IPP job attribute file exists for this job so
49718188661Ssonam gupta - Sun Microsystems - Bangalore India * change permissions and ownership of the file
49818188661Ssonam gupta - Sun Microsystems - Bangalore India */
49918188661Ssonam gupta - Sun Microsystems - Bangalore India (void) chownmod(path, Lp_Uid, Lp_Gid, 0644);
50018188661Ssonam gupta - Sun Microsystems - Bangalore India Free(path);
50118188661Ssonam gupta - Sun Microsystems - Bangalore India }
50218188661Ssonam gupta - Sun Microsystems - Bangalore India else
50318188661Ssonam gupta - Sun Microsystems - Bangalore India {
50418188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG,
50518188661Ssonam gupta - Sun Microsystems - Bangalore India "s_end_change_request: no attribute file");
50618188661Ssonam gupta - Sun Microsystems - Bangalore India }
50718188661Ssonam gupta - Sun Microsystems - Bangalore India #endif
50818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome &= ~(RS_CHANGING);
50918188661Ssonam gupta - Sun Microsystems - Bangalore India del_flt_act(md, FLT_CHANGE);
51018188661Ssonam gupta - Sun Microsystems - Bangalore India /*
51118188661Ssonam gupta - Sun Microsystems - Bangalore India * The RS_CHANGING bit may have been the only thing
51218188661Ssonam gupta - Sun Microsystems - Bangalore India * preventing this request from filtering or printing,
51318188661Ssonam gupta - Sun Microsystems - Bangalore India * so regardless of what happens below,
51418188661Ssonam gupta - Sun Microsystems - Bangalore India * we must check to see if the request can proceed.
51518188661Ssonam gupta - Sun Microsystems - Bangalore India */
51618188661Ssonam gupta - Sun Microsystems - Bangalore India call_schedule = 1;
5175a00db9dSsonam gupta - Sun Microsystems - Bangalore India
51818188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(r = Getrequest(rp->req_file)))
51918188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOOPEN;
52018188661Ssonam gupta - Sun Microsystems - Bangalore India else {
52118188661Ssonam gupta - Sun Microsystems - Bangalore India oldr = *(rp->request);
52218188661Ssonam gupta - Sun Microsystems - Bangalore India *(rp->request) = *r;
5235a00db9dSsonam gupta - Sun Microsystems - Bangalore India
52418188661Ssonam gupta - Sun Microsystems - Bangalore India move_ok =
52518188661Ssonam gupta - Sun Microsystems - Bangalore India STREQU(oldr.destination, r->destination);
5265a00db9dSsonam gupta - Sun Microsystems - Bangalore India
52718188661Ssonam gupta - Sun Microsystems - Bangalore India /*
52818188661Ssonam gupta - Sun Microsystems - Bangalore India * Preserve the current request status!
52918188661Ssonam gupta - Sun Microsystems - Bangalore India */
53018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome = oldr.outcome;
5315a00db9dSsonam gupta - Sun Microsystems - Bangalore India
53218188661Ssonam gupta - Sun Microsystems - Bangalore India /*
53318188661Ssonam gupta - Sun Microsystems - Bangalore India * Here's an example of the dangers one meets
53418188661Ssonam gupta - Sun Microsystems - Bangalore India * when public flags are used for private
53518188661Ssonam gupta - Sun Microsystems - Bangalore India * purposes. ".actions" (indeed, anything in the
53618188661Ssonam gupta - Sun Microsystems - Bangalore India * REQUEST structure) is set by the person
53718188661Ssonam gupta - Sun Microsystems - Bangalore India * changing the job. However, lpsched uses
53818188661Ssonam gupta - Sun Microsystems - Bangalore India * ".actions" as place to indicate that a job
53918188661Ssonam gupta - Sun Microsystems - Bangalore India * came from a remote system and we must send
54018188661Ssonam gupta - Sun Microsystems - Bangalore India * back job completion--this is a strictly
54118188661Ssonam gupta - Sun Microsystems - Bangalore India * private flag that we must preserve.
54218188661Ssonam gupta - Sun Microsystems - Bangalore India */
54318188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->actions |=
54418188661Ssonam gupta - Sun Microsystems - Bangalore India (oldr.actions & ACT_NOTIFY);
54518188661Ssonam gupta - Sun Microsystems - Bangalore India
54618188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL) ==
54718188661Ssonam gupta - Sun Microsystems - Bangalore India ACT_HOLD) {
54818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_HELD;
54918188661Ssonam gupta - Sun Microsystems - Bangalore India /*
55018188661Ssonam gupta - Sun Microsystems - Bangalore India * To be here means either the user owns
55148bbca81SDaniel Hoffman * the request or they are the
55218188661Ssonam gupta - Sun Microsystems - Bangalore India * administrator. Since we don't want to
55318188661Ssonam gupta - Sun Microsystems - Bangalore India * set the RS_ADMINHELD flag if the user
55418188661Ssonam gupta - Sun Microsystems - Bangalore India * is the administrator, the following
55518188661Ssonam gupta - Sun Microsystems - Bangalore India * compare will work.
55618188661Ssonam gupta - Sun Microsystems - Bangalore India */
55718188661Ssonam gupta - Sun Microsystems - Bangalore India if (md->uid != rp->secure->uid)
55818188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |=
55918188661Ssonam gupta - Sun Microsystems - Bangalore India RS_ADMINHELD;
56018188661Ssonam gupta - Sun Microsystems - Bangalore India }
5617c478bd9Sstevel@tonic-gate
56218188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL) ==
56318188661Ssonam gupta - Sun Microsystems - Bangalore India ACT_RESUME) {
56418188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->outcome & RS_ADMINHELD) &&
56518188661Ssonam gupta - Sun Microsystems - Bangalore India !md->admin) {
56618188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
56718188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
56818188661Ssonam gupta - Sun Microsystems - Bangalore India }
56918188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome &=
57018188661Ssonam gupta - Sun Microsystems - Bangalore India ~(RS_ADMINHELD|RS_HELD);
57118188661Ssonam gupta - Sun Microsystems - Bangalore India }
5727c478bd9Sstevel@tonic-gate
57318188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->actions & ACT_SPECIAL)
57418188661Ssonam gupta - Sun Microsystems - Bangalore India == ACT_IMMEDIATE) {
57518188661Ssonam gupta - Sun Microsystems - Bangalore India if (!md->admin) {
57618188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
57718188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
57818188661Ssonam gupta - Sun Microsystems - Bangalore India }
57918188661Ssonam gupta - Sun Microsystems - Bangalore India rp->request->outcome |= RS_IMMEDIATE;
58018188661Ssonam gupta - Sun Microsystems - Bangalore India }
5817c478bd9Sstevel@tonic-gate
58218188661Ssonam gupta - Sun Microsystems - Bangalore India size = chfiles(rp->request->file_list, Lp_Uid,
58318188661Ssonam gupta - Sun Microsystems - Bangalore India Lp_Gid);
58418188661Ssonam gupta - Sun Microsystems - Bangalore India if (size < 0) {
58518188661Ssonam gupta - Sun Microsystems - Bangalore India status = MUNKNOWN;
58618188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
58718188661Ssonam gupta - Sun Microsystems - Bangalore India }
58818188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(rp->request->outcome & RS_HELD) &&
58918188661Ssonam gupta - Sun Microsystems - Bangalore India size == 0) {
59018188661Ssonam gupta - Sun Microsystems - Bangalore India status = MNOPERM;
59118188661Ssonam gupta - Sun Microsystems - Bangalore India goto Return;
59218188661Ssonam gupta - Sun Microsystems - Bangalore India }
5937c478bd9Sstevel@tonic-gate
59418188661Ssonam gupta - Sun Microsystems - Bangalore India osize = rp->secure->size;
59518188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->size = size;
59618188661Ssonam gupta - Sun Microsystems - Bangalore India
59718188661Ssonam gupta - Sun Microsystems - Bangalore India if (move_ok == 0) {
59818188661Ssonam gupta - Sun Microsystems - Bangalore India char *dest = strdup(r->destination);
59918188661Ssonam gupta - Sun Microsystems - Bangalore India if ((status = mv_file(rp, dest)) == MOK)
60018188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->size = osize;
60118188661Ssonam gupta - Sun Microsystems - Bangalore India free(dest);
60218188661Ssonam gupta - Sun Microsystems - Bangalore India } else if ((err = validate_request(rp, (char **)0,
60318188661Ssonam gupta - Sun Microsystems - Bangalore India move_ok)) != MOK) {
60418188661Ssonam gupta - Sun Microsystems - Bangalore India status = err;
60518188661Ssonam gupta - Sun Microsystems - Bangalore India rp->secure->size = osize;
60618188661Ssonam gupta - Sun Microsystems - Bangalore India } else {
60718188661Ssonam gupta - Sun Microsystems - Bangalore India status = MOK;
60818188661Ssonam gupta - Sun Microsystems - Bangalore India
60918188661Ssonam gupta - Sun Microsystems - Bangalore India if ((rp->request->outcome & RS_IMMEDIATE) ||
61018188661Ssonam gupta - Sun Microsystems - Bangalore India (rp->request->priority != oldr.priority)) {
61118188661Ssonam gupta - Sun Microsystems - Bangalore India remover(rp);
61218188661Ssonam gupta - Sun Microsystems - Bangalore India insertr(rp);
61318188661Ssonam gupta - Sun Microsystems - Bangalore India }
61418188661Ssonam gupta - Sun Microsystems - Bangalore India
61518188661Ssonam gupta - Sun Microsystems - Bangalore India freerequest(&oldr);
61618188661Ssonam gupta - Sun Microsystems - Bangalore India (void) putrequest(rp->req_file, rp->request);
61718188661Ssonam gupta - Sun Microsystems - Bangalore India /*
61818188661Ssonam gupta - Sun Microsystems - Bangalore India * fix for bugid 1103890.
61918188661Ssonam gupta - Sun Microsystems - Bangalore India * use Putsecure instead.
62018188661Ssonam gupta - Sun Microsystems - Bangalore India */
62118188661Ssonam gupta - Sun Microsystems - Bangalore India (void) Putsecure(rp->req_file, rp->secure);
62218188661Ssonam gupta - Sun Microsystems - Bangalore India }
6237c478bd9Sstevel@tonic-gate }
6247c478bd9Sstevel@tonic-gate }
6257c478bd9Sstevel@tonic-gate
6267c478bd9Sstevel@tonic-gate Return:
62718188661Ssonam gupta - Sun Microsystems - Bangalore India if (status != MOK && rp) {
62818188661Ssonam gupta - Sun Microsystems - Bangalore India if (r) {
62918188661Ssonam gupta - Sun Microsystems - Bangalore India freerequest(r);
63018188661Ssonam gupta - Sun Microsystems - Bangalore India *(rp->request) = oldr;
63118188661Ssonam gupta - Sun Microsystems - Bangalore India }
63218188661Ssonam gupta - Sun Microsystems - Bangalore India if (status != MNOSTART)
63318188661Ssonam gupta - Sun Microsystems - Bangalore India (void) putrequest(rp->req_file, rp->request);
6347c478bd9Sstevel@tonic-gate }
6357c478bd9Sstevel@tonic-gate
63618188661Ssonam gupta - Sun Microsystems - Bangalore India if (call_schedule)
63718188661Ssonam gupta - Sun Microsystems - Bangalore India maybe_schedule(rp);
6387c478bd9Sstevel@tonic-gate
63918188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_END_CHANGE_REQUEST, status, chkprinter_result);
6407c478bd9Sstevel@tonic-gate }
6417c478bd9Sstevel@tonic-gate
64218188661Ssonam gupta - Sun Microsystems - Bangalore India /*
64318188661Ssonam gupta - Sun Microsystems - Bangalore India * _cancel()
64418188661Ssonam gupta - Sun Microsystems - Bangalore India * user may be (host!user)
64518188661Ssonam gupta - Sun Microsystems - Bangalore India */
6467c478bd9Sstevel@tonic-gate
6477c478bd9Sstevel@tonic-gate static char *
_cancel(MESG * md,char * dest,char * user,char * req_id)6487c478bd9Sstevel@tonic-gate _cancel(MESG *md, char *dest, char *user, char *req_id)
6497c478bd9Sstevel@tonic-gate {
65018188661Ssonam gupta - Sun Microsystems - Bangalore India static RSTATUS *rp;
65118188661Ssonam gupta - Sun Microsystems - Bangalore India static char *s_dest;
65218188661Ssonam gupta - Sun Microsystems - Bangalore India static char *s_user;
65318188661Ssonam gupta - Sun Microsystems - Bangalore India static char *s_req_id;
65418188661Ssonam gupta - Sun Microsystems - Bangalore India static int current;
65518188661Ssonam gupta - Sun Microsystems - Bangalore India RSTATUS *crp;
65618188661Ssonam gupta - Sun Microsystems - Bangalore India char *creq_id;
65718188661Ssonam gupta - Sun Microsystems - Bangalore India
65818188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "_cancel(%s, %s, %s)", (dest ? dest : "NULL"),
65918188661Ssonam gupta - Sun Microsystems - Bangalore India (user ? user : "NULL"), (req_id ? req_id : "NULL"));
66018188661Ssonam gupta - Sun Microsystems - Bangalore India
66118188661Ssonam gupta - Sun Microsystems - Bangalore India if (dest || user || req_id) {
66218188661Ssonam gupta - Sun Microsystems - Bangalore India s_dest = dest;
66318188661Ssonam gupta - Sun Microsystems - Bangalore India if (STREQU(user, "!"))
66418188661Ssonam gupta - Sun Microsystems - Bangalore India s_user = strdup("all!all");
66518188661Ssonam gupta - Sun Microsystems - Bangalore India else
66618188661Ssonam gupta - Sun Microsystems - Bangalore India s_user = user;
66718188661Ssonam gupta - Sun Microsystems - Bangalore India s_req_id = req_id;
66818188661Ssonam gupta - Sun Microsystems - Bangalore India rp = Request_List;
66918188661Ssonam gupta - Sun Microsystems - Bangalore India current = 0;
67018188661Ssonam gupta - Sun Microsystems - Bangalore India if (STREQU(s_req_id, CURRENT_REQ)) {
67118188661Ssonam gupta - Sun Microsystems - Bangalore India current = 1;
67218188661Ssonam gupta - Sun Microsystems - Bangalore India s_req_id = NULL;
67318188661Ssonam gupta - Sun Microsystems - Bangalore India }
6747c478bd9Sstevel@tonic-gate }
6757c478bd9Sstevel@tonic-gate
67618188661Ssonam gupta - Sun Microsystems - Bangalore India while (rp != NULL) {
67718188661Ssonam gupta - Sun Microsystems - Bangalore India crp = rp;
67818188661Ssonam gupta - Sun Microsystems - Bangalore India rp = rp->next;
6797c478bd9Sstevel@tonic-gate
68018188661Ssonam gupta - Sun Microsystems - Bangalore India if (*s_dest && !STREQU(s_dest, crp->request->destination))
68118188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
68218188661Ssonam gupta - Sun Microsystems - Bangalore India
68318188661Ssonam gupta - Sun Microsystems - Bangalore India if (current && !(crp->request->outcome & RS_PRINTING))
68418188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
6857c478bd9Sstevel@tonic-gate
68618188661Ssonam gupta - Sun Microsystems - Bangalore India if (s_req_id && *s_req_id &&
68718188661Ssonam gupta - Sun Microsystems - Bangalore India !STREQU(s_req_id, crp->secure->req_id))
68818188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
6897c478bd9Sstevel@tonic-gate
69018188661Ssonam gupta - Sun Microsystems - Bangalore India if (*s_user && !bangequ(s_user, crp->secure->user))
69118188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
6927c478bd9Sstevel@tonic-gate
69318188661Ssonam gupta - Sun Microsystems - Bangalore India if (!md->admin && md->uid != crp->secure->uid) {
69418188661Ssonam gupta - Sun Microsystems - Bangalore India errno = MNOPERM;
69518188661Ssonam gupta - Sun Microsystems - Bangalore India return (Strdup(crp->secure->req_id));
69618188661Ssonam gupta - Sun Microsystems - Bangalore India }
6977c478bd9Sstevel@tonic-gate
69818188661Ssonam gupta - Sun Microsystems - Bangalore India /*
69918188661Ssonam gupta - Sun Microsystems - Bangalore India * For Trusted Extensions, we need to check the
70018188661Ssonam gupta - Sun Microsystems - Bangalore India * sensitivity label of the
70118188661Ssonam gupta - Sun Microsystems - Bangalore India * connection and job before we try to cancel it.
70218188661Ssonam gupta - Sun Microsystems - Bangalore India */
70318188661Ssonam gupta - Sun Microsystems - Bangalore India if ((md->admin == 0) && (is_system_labeled()) &&
70418188661Ssonam gupta - Sun Microsystems - Bangalore India (md->slabel != NULL) && (crp->secure->slabel != NULL) &&
70518188661Ssonam gupta - Sun Microsystems - Bangalore India (!STREQU(md->slabel, crp->secure->slabel)))
70618188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
70745916cd2Sjpk
70818188661Ssonam gupta - Sun Microsystems - Bangalore India crp->reason = MOK;
70918188661Ssonam gupta - Sun Microsystems - Bangalore India creq_id = Strdup(crp->secure->req_id);
7107c478bd9Sstevel@tonic-gate
71118188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "cancel reqid (%s) uid: %d, secureuid: %d",
71218188661Ssonam gupta - Sun Microsystems - Bangalore India creq_id, md->uid, crp->secure->uid);
7137c478bd9Sstevel@tonic-gate
71418188661Ssonam gupta - Sun Microsystems - Bangalore India if (cancel(crp, (md->uid != crp->secure->uid)))
71518188661Ssonam gupta - Sun Microsystems - Bangalore India errno = MOK;
71618188661Ssonam gupta - Sun Microsystems - Bangalore India else
71718188661Ssonam gupta - Sun Microsystems - Bangalore India errno = M2LATE;
71818188661Ssonam gupta - Sun Microsystems - Bangalore India return (creq_id);
71918188661Ssonam gupta - Sun Microsystems - Bangalore India }
7207c478bd9Sstevel@tonic-gate
72118188661Ssonam gupta - Sun Microsystems - Bangalore India errno = MUNKNOWN;
72218188661Ssonam gupta - Sun Microsystems - Bangalore India return (NULL);
7237c478bd9Sstevel@tonic-gate }
7247c478bd9Sstevel@tonic-gate
72518188661Ssonam gupta - Sun Microsystems - Bangalore India /*
72618188661Ssonam gupta - Sun Microsystems - Bangalore India * s_cancel_request()
72718188661Ssonam gupta - Sun Microsystems - Bangalore India */
7287c478bd9Sstevel@tonic-gate
72918188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_cancel_request(char * m,MESG * md)73018188661Ssonam gupta - Sun Microsystems - Bangalore India s_cancel_request(char *m, MESG *md)
7317c478bd9Sstevel@tonic-gate {
7327c478bd9Sstevel@tonic-gate char *req_id, *rid;
7337c478bd9Sstevel@tonic-gate short status;
7347c478bd9Sstevel@tonic-gate
7357c478bd9Sstevel@tonic-gate (void) getmessage(m, S_CANCEL_REQUEST, &req_id);
7367c478bd9Sstevel@tonic-gate syslog(LOG_DEBUG, "s_cancel_request(%s)", (req_id ? req_id : "NULL"));
7377c478bd9Sstevel@tonic-gate
7387c478bd9Sstevel@tonic-gate if ((rid = _cancel(md, "", "", req_id)) != NULL)
7397c478bd9Sstevel@tonic-gate Free(rid);
7407c478bd9Sstevel@tonic-gate status = (short)errno;
74118188661Ssonam gupta - Sun Microsystems - Bangalore India
7427c478bd9Sstevel@tonic-gate mputm(md, R_CANCEL_REQUEST, status);
7437c478bd9Sstevel@tonic-gate }
7447c478bd9Sstevel@tonic-gate
74518188661Ssonam gupta - Sun Microsystems - Bangalore India /*
74618188661Ssonam gupta - Sun Microsystems - Bangalore India * s_cancel()
74718188661Ssonam gupta - Sun Microsystems - Bangalore India */
7487c478bd9Sstevel@tonic-gate
74918188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_cancel(char * m,MESG * md)75018188661Ssonam gupta - Sun Microsystems - Bangalore India s_cancel(char *m, MESG *md)
7517c478bd9Sstevel@tonic-gate {
75218188661Ssonam gupta - Sun Microsystems - Bangalore India char *req_id;
75318188661Ssonam gupta - Sun Microsystems - Bangalore India char *user;
75418188661Ssonam gupta - Sun Microsystems - Bangalore India char *destination;
75518188661Ssonam gupta - Sun Microsystems - Bangalore India char *rid;
75618188661Ssonam gupta - Sun Microsystems - Bangalore India char *nrid;
75718188661Ssonam gupta - Sun Microsystems - Bangalore India int nerrno;
75818188661Ssonam gupta - Sun Microsystems - Bangalore India int oerrno;
75918188661Ssonam gupta - Sun Microsystems - Bangalore India
76018188661Ssonam gupta - Sun Microsystems - Bangalore India (void) getmessage(m, S_CANCEL, &destination, &user, &req_id);
76118188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_cancel(%s, %s, %s)",
76218188661Ssonam gupta - Sun Microsystems - Bangalore India (destination ? destination : "NULL"), (user ? user : "NULL"),
76318188661Ssonam gupta - Sun Microsystems - Bangalore India (req_id ? req_id : "NULL"));
76418188661Ssonam gupta - Sun Microsystems - Bangalore India
76518188661Ssonam gupta - Sun Microsystems - Bangalore India if (STREQU(destination, NAME_ALL))
76618188661Ssonam gupta - Sun Microsystems - Bangalore India destination = "";
76718188661Ssonam gupta - Sun Microsystems - Bangalore India if (STREQU(req_id, NAME_ALL))
76818188661Ssonam gupta - Sun Microsystems - Bangalore India req_id = "";
76918188661Ssonam gupta - Sun Microsystems - Bangalore India
77018188661Ssonam gupta - Sun Microsystems - Bangalore India if (rid = _cancel(md, destination, user, req_id)) {
77118188661Ssonam gupta - Sun Microsystems - Bangalore India oerrno = errno;
77218188661Ssonam gupta - Sun Microsystems - Bangalore India
77318188661Ssonam gupta - Sun Microsystems - Bangalore India while ((nrid = _cancel(md, NULL, NULL, NULL)) != NULL) {
77418188661Ssonam gupta - Sun Microsystems - Bangalore India nerrno = errno;
77518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_CANCEL, MOKMORE, oerrno, rid);
77618188661Ssonam gupta - Sun Microsystems - Bangalore India Free(rid);
77718188661Ssonam gupta - Sun Microsystems - Bangalore India rid = nrid;
77818188661Ssonam gupta - Sun Microsystems - Bangalore India oerrno = nerrno;
77918188661Ssonam gupta - Sun Microsystems - Bangalore India }
78018188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_CANCEL, MOK, oerrno, rid);
78118188661Ssonam gupta - Sun Microsystems - Bangalore India Free(rid);
78218188661Ssonam gupta - Sun Microsystems - Bangalore India return;
7837c478bd9Sstevel@tonic-gate }
7847c478bd9Sstevel@tonic-gate
78518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_CANCEL, MOK, MUNKNOWN, "");
7867c478bd9Sstevel@tonic-gate }
7877c478bd9Sstevel@tonic-gate
7887c478bd9Sstevel@tonic-gate /*
7897c478bd9Sstevel@tonic-gate * s_inquire_request_rank()
7907c478bd9Sstevel@tonic-gate */
7917c478bd9Sstevel@tonic-gate
79218188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_inquire_request_rank(char * m,MESG * md)79318188661Ssonam gupta - Sun Microsystems - Bangalore India s_inquire_request_rank(char *m, MESG *md)
7947c478bd9Sstevel@tonic-gate {
7957c478bd9Sstevel@tonic-gate char *form;
7967c478bd9Sstevel@tonic-gate char *dest;
7977c478bd9Sstevel@tonic-gate char *pwheel;
7987c478bd9Sstevel@tonic-gate char *user;
7997c478bd9Sstevel@tonic-gate char *req_id;
8007c478bd9Sstevel@tonic-gate RSTATUS *rp;
8017c478bd9Sstevel@tonic-gate RSTATUS *found = NULL;
8027c478bd9Sstevel@tonic-gate int found_rank = 0;
8037c478bd9Sstevel@tonic-gate short prop;
8047c478bd9Sstevel@tonic-gate char files[BUFSIZ];
8050a44ef6dSjacobs int i;
8067c478bd9Sstevel@tonic-gate
8077c478bd9Sstevel@tonic-gate (void) getmessage(m, S_INQUIRE_REQUEST_RANK, &prop, &form, &dest,
80818188661Ssonam gupta - Sun Microsystems - Bangalore India &req_id, &user, &pwheel);
8097c478bd9Sstevel@tonic-gate syslog(LOG_DEBUG, "s_inquire_request_rank(%d, %s, %s, %s, %s, %s)",
81018188661Ssonam gupta - Sun Microsystems - Bangalore India prop, (form ? form : "NULL"), (dest ? dest : "NULL"),
81118188661Ssonam gupta - Sun Microsystems - Bangalore India (req_id ? req_id : "NULL"), (user ? user : "NULL"),
81218188661Ssonam gupta - Sun Microsystems - Bangalore India (pwheel ? pwheel : "NULL"));
8137c478bd9Sstevel@tonic-gate
8140a44ef6dSjacobs for (i = 0; PStatus != NULL && PStatus[i] != NULL; i++)
8150a44ef6dSjacobs PStatus[i]->nrequests = 0;
8167c478bd9Sstevel@tonic-gate
8177c478bd9Sstevel@tonic-gate for (rp = Request_List; rp != NULL; rp = rp->next) {
8187c478bd9Sstevel@tonic-gate if (rp->printer && !(rp->request->outcome & RS_DONE))
8197c478bd9Sstevel@tonic-gate rp->printer->nrequests++;
8207c478bd9Sstevel@tonic-gate
8217c478bd9Sstevel@tonic-gate if (*form && !SAME(form, rp->request->form))
8227c478bd9Sstevel@tonic-gate continue;
8237c478bd9Sstevel@tonic-gate
8247c478bd9Sstevel@tonic-gate if (*dest && !STREQU(dest, rp->request->destination)) {
8257c478bd9Sstevel@tonic-gate if (!rp->printer)
8267c478bd9Sstevel@tonic-gate continue;
8277c478bd9Sstevel@tonic-gate if (!STREQU(dest, rp->printer->printer->name))
8287c478bd9Sstevel@tonic-gate continue;
8297c478bd9Sstevel@tonic-gate }
83018188661Ssonam gupta - Sun Microsystems - Bangalore India
8317c478bd9Sstevel@tonic-gate if (*req_id && !STREQU(req_id, rp->secure->req_id))
8327c478bd9Sstevel@tonic-gate continue;
8337c478bd9Sstevel@tonic-gate
8347c478bd9Sstevel@tonic-gate if (*user && !bangequ(user, rp->secure->user))
8357c478bd9Sstevel@tonic-gate continue;
8367c478bd9Sstevel@tonic-gate
8377c478bd9Sstevel@tonic-gate if (*pwheel && !SAME(pwheel, rp->pwheel_name))
8387c478bd9Sstevel@tonic-gate continue;
83945916cd2Sjpk /*
84045916cd2Sjpk * For Trusted Extensions, we need to check the sensitivity
84145916cd2Sjpk * label of the connection and job before we return it to the
84245916cd2Sjpk * client.
84345916cd2Sjpk */
84445916cd2Sjpk if ((md->admin <= 0) && (is_system_labeled()) &&
84545916cd2Sjpk (md->slabel != NULL) && (rp->secure->slabel != NULL) &&
84645916cd2Sjpk (!STREQU(md->slabel, rp->secure->slabel)))
84745916cd2Sjpk continue;
8487c478bd9Sstevel@tonic-gate
8497c478bd9Sstevel@tonic-gate if (found) {
85018188661Ssonam gupta - Sun Microsystems - Bangalore India GetRequestFiles(found->request, files, sizeof (files));
8517c478bd9Sstevel@tonic-gate mputm(md, R_INQUIRE_REQUEST_RANK,
85218188661Ssonam gupta - Sun Microsystems - Bangalore India MOKMORE,
85318188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->req_id,
85418188661Ssonam gupta - Sun Microsystems - Bangalore India found->request->user,
85518188661Ssonam gupta - Sun Microsystems - Bangalore India /* bgolden 091996, bug 1257405 */
85618188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->slabel,
85718188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->size,
85818188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->date,
85918188661Ssonam gupta - Sun Microsystems - Bangalore India found->request->outcome,
86018188661Ssonam gupta - Sun Microsystems - Bangalore India found->printer->printer->name,
86118188661Ssonam gupta - Sun Microsystems - Bangalore India (found->form? found->form->form->name : ""),
86218188661Ssonam gupta - Sun Microsystems - Bangalore India NB(found->pwheel_name),
86318188661Ssonam gupta - Sun Microsystems - Bangalore India found_rank,
86418188661Ssonam gupta - Sun Microsystems - Bangalore India files);
8657c478bd9Sstevel@tonic-gate }
8667c478bd9Sstevel@tonic-gate found = rp;
8677c478bd9Sstevel@tonic-gate found_rank = found->printer->nrequests;
8687c478bd9Sstevel@tonic-gate }
8697c478bd9Sstevel@tonic-gate
8707c478bd9Sstevel@tonic-gate if (found) {
87118188661Ssonam gupta - Sun Microsystems - Bangalore India GetRequestFiles(found->request, files, sizeof (files));
8727c478bd9Sstevel@tonic-gate mputm(md, R_INQUIRE_REQUEST_RANK,
87318188661Ssonam gupta - Sun Microsystems - Bangalore India MOK,
87418188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->req_id,
87518188661Ssonam gupta - Sun Microsystems - Bangalore India found->request->user, /* bgolden 091996, bug 1257405 */
87618188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->slabel,
87718188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->size,
87818188661Ssonam gupta - Sun Microsystems - Bangalore India found->secure->date,
87918188661Ssonam gupta - Sun Microsystems - Bangalore India found->request->outcome,
88018188661Ssonam gupta - Sun Microsystems - Bangalore India found->printer->printer->name,
88118188661Ssonam gupta - Sun Microsystems - Bangalore India (found->form? found->form->form->name : ""),
88218188661Ssonam gupta - Sun Microsystems - Bangalore India NB(found->pwheel_name),
88318188661Ssonam gupta - Sun Microsystems - Bangalore India found_rank,
88418188661Ssonam gupta - Sun Microsystems - Bangalore India files);
8857c478bd9Sstevel@tonic-gate } else
88645916cd2Sjpk mputm(md, R_INQUIRE_REQUEST_RANK, MNOINFO, "", "", "", 0L, 0L,
88718188661Ssonam gupta - Sun Microsystems - Bangalore India 0, "", "", "", 0, "");
8887c478bd9Sstevel@tonic-gate }
8897c478bd9Sstevel@tonic-gate
8907c478bd9Sstevel@tonic-gate static int
mv_file(RSTATUS * rp,char * dest)8917c478bd9Sstevel@tonic-gate mv_file(RSTATUS *rp, char *dest)
8927c478bd9Sstevel@tonic-gate {
8937c478bd9Sstevel@tonic-gate int stat;
8947c478bd9Sstevel@tonic-gate char *olddest;
8957c478bd9Sstevel@tonic-gate EXEC *oldexec;
8967c478bd9Sstevel@tonic-gate SECURE * securep;
8977c478bd9Sstevel@tonic-gate RSTATUS * prs;
89818188661Ssonam gupta - Sun Microsystems - Bangalore India char *reqno;
8997c478bd9Sstevel@tonic-gate
9007c478bd9Sstevel@tonic-gate oldexec = rp->printer->exec;
9017c478bd9Sstevel@tonic-gate olddest = rp->request->destination;
9027c478bd9Sstevel@tonic-gate rp->request->destination = Strdup(dest);
9037c478bd9Sstevel@tonic-gate if ((stat = validate_request(rp, (char **)0, 1)) == MOK) {
9047c478bd9Sstevel@tonic-gate Free(olddest);
9057c478bd9Sstevel@tonic-gate
9067c478bd9Sstevel@tonic-gate if (rp->request->outcome & RS_FILTERED) {
9077c478bd9Sstevel@tonic-gate int cnt = 0;
9087c478bd9Sstevel@tonic-gate char *reqno;
9097c478bd9Sstevel@tonic-gate char **listp;
9107c478bd9Sstevel@tonic-gate char tmp_nam[MAXPATHLEN];
9117c478bd9Sstevel@tonic-gate
9127c478bd9Sstevel@tonic-gate reqno = getreqno(rp->secure->req_id);
9137c478bd9Sstevel@tonic-gate for (listp = rp->request->file_list; *listp; listp++) {
9147c478bd9Sstevel@tonic-gate cnt++;
9157c478bd9Sstevel@tonic-gate snprintf(tmp_nam, sizeof (tmp_nam),
91618188661Ssonam gupta - Sun Microsystems - Bangalore India "%s/F%s-%d", Lp_Temp, reqno, cnt);
9177c478bd9Sstevel@tonic-gate unlink(tmp_nam);
9187c478bd9Sstevel@tonic-gate
9197c478bd9Sstevel@tonic-gate }
9207c478bd9Sstevel@tonic-gate rp->request->outcome &= ~RS_FILTERED;
9217c478bd9Sstevel@tonic-gate }
9227c478bd9Sstevel@tonic-gate
9237c478bd9Sstevel@tonic-gate /* update /var/spool/lp/tmp/<host>/nnn-0 */
9247c478bd9Sstevel@tonic-gate if (putrequest(rp->req_file, rp->request) < 0) {
9257c478bd9Sstevel@tonic-gate note("putrequest failed\n");
9267c478bd9Sstevel@tonic-gate return (MNOMEM);
9277c478bd9Sstevel@tonic-gate }
9287c478bd9Sstevel@tonic-gate
9297c478bd9Sstevel@tonic-gate /* update /var/spool/lp/requests/<host>/nnn-0 */
9307c478bd9Sstevel@tonic-gate if ((securep = Getsecure(rp->req_file))) {
9317c478bd9Sstevel@tonic-gate reqno = strdup(getreqno(securep->req_id));
9327c478bd9Sstevel@tonic-gate (void) free(securep->req_id);
9337c478bd9Sstevel@tonic-gate if ((securep->req_id = calloc(strlen(dest) + 1 +
93418188661Ssonam gupta - Sun Microsystems - Bangalore India strlen(reqno) +1, sizeof (char))) == NULL)
9357c478bd9Sstevel@tonic-gate return (MNOMEM);
9367c478bd9Sstevel@tonic-gate (void) sprintf(securep->req_id, "%s-%s", dest, reqno);
9377c478bd9Sstevel@tonic-gate /* remove the old request file; save new one */
9387c478bd9Sstevel@tonic-gate (void) rmsecure(rp->secure->req_id);
9397c478bd9Sstevel@tonic-gate if (Putsecure(rp->req_file, securep) < 0) {
9407c478bd9Sstevel@tonic-gate /* Putsecure includes note/errmessage */
9417c478bd9Sstevel@tonic-gate return (MNOMEM);
9427c478bd9Sstevel@tonic-gate }
9437c478bd9Sstevel@tonic-gate } else {
9447c478bd9Sstevel@tonic-gate note("Getsecure failed\n");
9457c478bd9Sstevel@tonic-gate return (MNOMEM);
9467c478bd9Sstevel@tonic-gate }
9477c478bd9Sstevel@tonic-gate
9487c478bd9Sstevel@tonic-gate /* update internal jobs list: Request_list */
9497c478bd9Sstevel@tonic-gate if (prs = request_by_id(rp->secure->req_id)) {
9507c478bd9Sstevel@tonic-gate free(prs->secure->req_id);
9517c478bd9Sstevel@tonic-gate prs->secure->req_id = strdup(securep->req_id);
9527c478bd9Sstevel@tonic-gate
9537c478bd9Sstevel@tonic-gate /*
9547c478bd9Sstevel@tonic-gate * We calloc'd securep->reqid earlier, now we free it
9557c478bd9Sstevel@tonic-gate * here because we no longer call 'freesecure' from
9567c478bd9Sstevel@tonic-gate * Putsecure() if we use a static structure
9577c478bd9Sstevel@tonic-gate */
9587c478bd9Sstevel@tonic-gate
9597c478bd9Sstevel@tonic-gate free(securep->req_id);
9607c478bd9Sstevel@tonic-gate } else {
9617c478bd9Sstevel@tonic-gate note("request_by_id failed\n");
9627c478bd9Sstevel@tonic-gate return (MUNKNOWN);
9637c478bd9Sstevel@tonic-gate }
9647c478bd9Sstevel@tonic-gate
9657c478bd9Sstevel@tonic-gate /*
9667c478bd9Sstevel@tonic-gate * If the request was being filtered or was printing,
9677c478bd9Sstevel@tonic-gate * it would have been stopped in "validate_request()",
9687c478bd9Sstevel@tonic-gate * but only if it has to be refiltered. Thus, the
9697c478bd9Sstevel@tonic-gate * filtering has been stopped if it has to be stopped,
9707c478bd9Sstevel@tonic-gate * but the printing may still be going.
9717c478bd9Sstevel@tonic-gate */
9727c478bd9Sstevel@tonic-gate if (rp->request->outcome & RS_PRINTING &&
9737c478bd9Sstevel@tonic-gate !(rp->request->outcome & RS_STOPPED)) {
9747c478bd9Sstevel@tonic-gate rp->request->outcome |= RS_STOPPED;
97518188661Ssonam gupta - Sun Microsystems - Bangalore India terminate(oldexec);
97618188661Ssonam gupta - Sun Microsystems - Bangalore India }
9777c478bd9Sstevel@tonic-gate
9787c478bd9Sstevel@tonic-gate maybe_schedule(rp);
9797c478bd9Sstevel@tonic-gate return (MOK);
9807c478bd9Sstevel@tonic-gate }
9817c478bd9Sstevel@tonic-gate
9827c478bd9Sstevel@tonic-gate Free(rp->request->destination);
9837c478bd9Sstevel@tonic-gate rp->request->destination = olddest;
9847c478bd9Sstevel@tonic-gate return (stat);
9857c478bd9Sstevel@tonic-gate }
9867c478bd9Sstevel@tonic-gate
9877c478bd9Sstevel@tonic-gate /*
9887c478bd9Sstevel@tonic-gate * s_move_request()
9897c478bd9Sstevel@tonic-gate */
9907c478bd9Sstevel@tonic-gate
99118188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_move_request(char * m,MESG * md)99218188661Ssonam gupta - Sun Microsystems - Bangalore India s_move_request(char *m, MESG *md)
9937c478bd9Sstevel@tonic-gate {
9947c478bd9Sstevel@tonic-gate RSTATUS *rp;
9957c478bd9Sstevel@tonic-gate short err;
9967c478bd9Sstevel@tonic-gate char *req_id;
9977c478bd9Sstevel@tonic-gate char *dest;
9987c478bd9Sstevel@tonic-gate
9997c478bd9Sstevel@tonic-gate (void) getmessage(m, S_MOVE_REQUEST, &req_id, &dest);
10007c478bd9Sstevel@tonic-gate syslog(LOG_DEBUG, "s_move_request(%s, %s)", (req_id ? req_id : "NULL"),
100118188661Ssonam gupta - Sun Microsystems - Bangalore India (dest ? dest : "NULL"));
10027c478bd9Sstevel@tonic-gate
10037c478bd9Sstevel@tonic-gate
10040a44ef6dSjacobs if (!(search_pstatus(dest)) && !(search_cstatus(dest))) {
10057c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, MNODEST, 0L);
10067c478bd9Sstevel@tonic-gate return;
10077c478bd9Sstevel@tonic-gate }
10087c478bd9Sstevel@tonic-gate
10097c478bd9Sstevel@tonic-gate if ((rp = request_by_id(req_id))) {
10107c478bd9Sstevel@tonic-gate if (STREQU(rp->request->destination, dest)) {
10117c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, MOK, 0L);
10127c478bd9Sstevel@tonic-gate return;
10137c478bd9Sstevel@tonic-gate }
10147c478bd9Sstevel@tonic-gate if (rp->request->outcome & (RS_DONE|RS_NOTIFYING)) {
10157c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, M2LATE, 0L);
10167c478bd9Sstevel@tonic-gate return;
10177c478bd9Sstevel@tonic-gate }
10187c478bd9Sstevel@tonic-gate if (rp->request->outcome & RS_CHANGING) {
10197c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, MBUSY, 0L);
10207c478bd9Sstevel@tonic-gate return;
10217c478bd9Sstevel@tonic-gate }
10227c478bd9Sstevel@tonic-gate if ((err = mv_file(rp, dest)) == MOK) {
10237c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, MOK, 0L);
10247c478bd9Sstevel@tonic-gate return;
10257c478bd9Sstevel@tonic-gate }
10267c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, err, chkprinter_result);
10277c478bd9Sstevel@tonic-gate return;
10287c478bd9Sstevel@tonic-gate }
10297c478bd9Sstevel@tonic-gate mputm(md, R_MOVE_REQUEST, MUNKNOWN, 0L);
10307c478bd9Sstevel@tonic-gate }
10317c478bd9Sstevel@tonic-gate
103218188661Ssonam gupta - Sun Microsystems - Bangalore India /*
103318188661Ssonam gupta - Sun Microsystems - Bangalore India * s_move_dest()
103418188661Ssonam gupta - Sun Microsystems - Bangalore India */
10357c478bd9Sstevel@tonic-gate
103618188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_move_dest(char * m,MESG * md)103718188661Ssonam gupta - Sun Microsystems - Bangalore India s_move_dest(char *m, MESG *md)
10387c478bd9Sstevel@tonic-gate {
103918188661Ssonam gupta - Sun Microsystems - Bangalore India char *dest;
104018188661Ssonam gupta - Sun Microsystems - Bangalore India char *fromdest;
104118188661Ssonam gupta - Sun Microsystems - Bangalore India RSTATUS *rp;
104218188661Ssonam gupta - Sun Microsystems - Bangalore India char *found = (char *)0;
104318188661Ssonam gupta - Sun Microsystems - Bangalore India short num_ok = 0;
104418188661Ssonam gupta - Sun Microsystems - Bangalore India
104518188661Ssonam gupta - Sun Microsystems - Bangalore India (void) getmessage(m, S_MOVE_DEST, &fromdest, &dest);
104618188661Ssonam gupta - Sun Microsystems - Bangalore India syslog(LOG_DEBUG, "s_move_dest(%s, %s)", (fromdest ? fromdest : "NULL"),
104718188661Ssonam gupta - Sun Microsystems - Bangalore India (dest ? dest : "NULL"));
104818188661Ssonam gupta - Sun Microsystems - Bangalore India
104918188661Ssonam gupta - Sun Microsystems - Bangalore India if (!search_pstatus(fromdest) && !search_cstatus(fromdest)) {
105018188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MNODEST, fromdest, 0);
105118188661Ssonam gupta - Sun Microsystems - Bangalore India return;
10527c478bd9Sstevel@tonic-gate }
10537c478bd9Sstevel@tonic-gate
105418188661Ssonam gupta - Sun Microsystems - Bangalore India if (!(search_pstatus(dest)) && !(search_cstatus(dest))) {
105518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MNODEST, dest, 0);
105618188661Ssonam gupta - Sun Microsystems - Bangalore India return;
105718188661Ssonam gupta - Sun Microsystems - Bangalore India }
10587c478bd9Sstevel@tonic-gate
105918188661Ssonam gupta - Sun Microsystems - Bangalore India if (STREQU(dest, fromdest)) {
106018188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MOK, "", 0);
106118188661Ssonam gupta - Sun Microsystems - Bangalore India return;
106218188661Ssonam gupta - Sun Microsystems - Bangalore India }
10637c478bd9Sstevel@tonic-gate
106418188661Ssonam gupta - Sun Microsystems - Bangalore India for (rp = Request_List; rp != NULL; rp = rp->next) {
106518188661Ssonam gupta - Sun Microsystems - Bangalore India if ((STREQU(rp->request->destination, fromdest)) &&
106618188661Ssonam gupta - Sun Microsystems - Bangalore India (!(rp->request->outcome &
106718188661Ssonam gupta - Sun Microsystems - Bangalore India (RS_DONE|RS_CHANGING|RS_NOTIFYING)))) {
106818188661Ssonam gupta - Sun Microsystems - Bangalore India if (mv_file(rp, dest) == MOK) {
106918188661Ssonam gupta - Sun Microsystems - Bangalore India num_ok++;
107018188661Ssonam gupta - Sun Microsystems - Bangalore India continue;
107118188661Ssonam gupta - Sun Microsystems - Bangalore India }
107218188661Ssonam gupta - Sun Microsystems - Bangalore India }
107318188661Ssonam gupta - Sun Microsystems - Bangalore India
107418188661Ssonam gupta - Sun Microsystems - Bangalore India if (found)
107518188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MMORERR, found, 0);
107618188661Ssonam gupta - Sun Microsystems - Bangalore India
107718188661Ssonam gupta - Sun Microsystems - Bangalore India found = rp->secure->req_id;
107818188661Ssonam gupta - Sun Microsystems - Bangalore India }
107918188661Ssonam gupta - Sun Microsystems - Bangalore India
108018188661Ssonam gupta - Sun Microsystems - Bangalore India if (found)
108118188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MERRDEST, found, num_ok);
108218188661Ssonam gupta - Sun Microsystems - Bangalore India else
108318188661Ssonam gupta - Sun Microsystems - Bangalore India mputm(md, R_MOVE_DEST, MOK, "", num_ok);
10847c478bd9Sstevel@tonic-gate }
10857c478bd9Sstevel@tonic-gate
108618188661Ssonam gupta - Sun Microsystems - Bangalore India /*
108718188661Ssonam gupta - Sun Microsystems - Bangalore India * reqpath
108818188661Ssonam gupta - Sun Microsystems - Bangalore India */
10897c478bd9Sstevel@tonic-gate
10907c478bd9Sstevel@tonic-gate static char *
reqpath(char * file,char ** idnumber)10917c478bd9Sstevel@tonic-gate reqpath(char *file, char **idnumber)
10927c478bd9Sstevel@tonic-gate {
109318188661Ssonam gupta - Sun Microsystems - Bangalore India char *path;
109418188661Ssonam gupta - Sun Microsystems - Bangalore India char *cp;
109518188661Ssonam gupta - Sun Microsystems - Bangalore India char *cp2;
109618188661Ssonam gupta - Sun Microsystems - Bangalore India
109718188661Ssonam gupta - Sun Microsystems - Bangalore India /*
109818188661Ssonam gupta - Sun Microsystems - Bangalore India * /var/spool/lp/tmp/machine/123-0
109918188661Ssonam gupta - Sun Microsystems - Bangalore India * /var/spool/lp/temp/123-0
110018188661Ssonam gupta - Sun Microsystems - Bangalore India * /usr/spool/lp/temp/123-0
110118188661Ssonam gupta - Sun Microsystems - Bangalore India * /usr/spool/lp/tmp/machine/123-0
110218188661Ssonam gupta - Sun Microsystems - Bangalore India * 123-0
110318188661Ssonam gupta - Sun Microsystems - Bangalore India * machine/123-0
110418188661Ssonam gupta - Sun Microsystems - Bangalore India *
110518188661Ssonam gupta - Sun Microsystems - Bangalore India * /var/spool/lp/tmp/machine/123-0 + 123
110618188661Ssonam gupta - Sun Microsystems - Bangalore India */
110718188661Ssonam gupta - Sun Microsystems - Bangalore India if (*file == '/') {
110818188661Ssonam gupta - Sun Microsystems - Bangalore India /*CONSTCOND*/
110918188661Ssonam gupta - Sun Microsystems - Bangalore India if (STRNEQU(file, Lp_Spooldir, strlen(Lp_Spooldir)))
111018188661Ssonam gupta - Sun Microsystems - Bangalore India cp = file + strlen(Lp_Spooldir) + 1;
111118188661Ssonam gupta - Sun Microsystems - Bangalore India else {
111218188661Ssonam gupta - Sun Microsystems - Bangalore India if (STRNEQU(file, "/usr/spool/lp", 13))
111318188661Ssonam gupta - Sun Microsystems - Bangalore India cp = file + strlen("/usr/spool/lp") + 1;
111418188661Ssonam gupta - Sun Microsystems - Bangalore India else {
111518188661Ssonam gupta - Sun Microsystems - Bangalore India *idnumber = NULL;
111618188661Ssonam gupta - Sun Microsystems - Bangalore India return (NULL);
111718188661Ssonam gupta - Sun Microsystems - Bangalore India }
111818188661Ssonam gupta - Sun Microsystems - Bangalore India }
111918188661Ssonam gupta - Sun Microsystems - Bangalore India
112018188661Ssonam gupta - Sun Microsystems - Bangalore India if (STRNEQU(cp, "temp", 4)) {
112118188661Ssonam gupta - Sun Microsystems - Bangalore India cp += 5;
112218188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Local_System, cp, NULL);
112318188661Ssonam gupta - Sun Microsystems - Bangalore India }
112418188661Ssonam gupta - Sun Microsystems - Bangalore India else
112518188661Ssonam gupta - Sun Microsystems - Bangalore India path = Strdup(cp);
112618188661Ssonam gupta - Sun Microsystems - Bangalore India }
11277c478bd9Sstevel@tonic-gate else
11287c478bd9Sstevel@tonic-gate {
112918188661Ssonam gupta - Sun Microsystems - Bangalore India if (strchr(file, '/'))
113018188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(file, NULL);
113118188661Ssonam gupta - Sun Microsystems - Bangalore India else
113218188661Ssonam gupta - Sun Microsystems - Bangalore India path = makepath(Local_System, file, NULL);
11337c478bd9Sstevel@tonic-gate }
113418188661Ssonam gupta - Sun Microsystems - Bangalore India
113518188661Ssonam gupta - Sun Microsystems - Bangalore India cp = strrchr(path, '/');
113618188661Ssonam gupta - Sun Microsystems - Bangalore India cp++;
113718188661Ssonam gupta - Sun Microsystems - Bangalore India if ((cp2 = strrchr(cp, '-')) == NULL)
113818188661Ssonam gupta - Sun Microsystems - Bangalore India *idnumber = Strdup(cp);
11397c478bd9Sstevel@tonic-gate else
114018188661Ssonam gupta - Sun Microsystems - Bangalore India {
114118188661Ssonam gupta - Sun Microsystems - Bangalore India *cp2 = '\0';
114218188661Ssonam gupta - Sun Microsystems - Bangalore India *idnumber = Strdup(cp);
114318188661Ssonam gupta - Sun Microsystems - Bangalore India *cp2 = '-';
114418188661Ssonam gupta - Sun Microsystems - Bangalore India }
114518188661Ssonam gupta - Sun Microsystems - Bangalore India
114618188661Ssonam gupta - Sun Microsystems - Bangalore India return (path);
11477c478bd9Sstevel@tonic-gate }
114845916cd2Sjpk
114945916cd2Sjpk /*
1150da6c28aaSamw * The client is sending a peer connection to retrieve label information
115145916cd2Sjpk * from. This is used in the event that the client is an intermediary for
115245916cd2Sjpk * the actual requestor in a Trusted environment.
115345916cd2Sjpk */
115418188661Ssonam gupta - Sun Microsystems - Bangalore India void
s_pass_peer_connection(char * m,MESG * md)115518188661Ssonam gupta - Sun Microsystems - Bangalore India s_pass_peer_connection(char *m, MESG *md)
115645916cd2Sjpk {
115745916cd2Sjpk short status = MTRANSMITERR;
115845916cd2Sjpk char *dest;
115945916cd2Sjpk struct strrecvfd recv_fd;
116045916cd2Sjpk
116145916cd2Sjpk (void) getmessage(m, S_PASS_PEER_CONNECTION);
116245916cd2Sjpk syslog(LOG_DEBUG, "s_pass_peer_connection()");
116345916cd2Sjpk
1164*e4fb8a5fSToomas Soome memset(&recv_fd, 0, sizeof (recv_fd));
116545916cd2Sjpk if (ioctl(md->readfd, I_RECVFD, &recv_fd) == 0) {
116645916cd2Sjpk int fd = recv_fd.fd;
116745916cd2Sjpk
116845916cd2Sjpk if (get_peer_label(fd, &md->slabel) == 0) {
116945916cd2Sjpk if (md->admin == 1)
117045916cd2Sjpk md->admin = -1; /* turn off query privilege */
117145916cd2Sjpk status = MOK;
117245916cd2Sjpk }
117345916cd2Sjpk
117445916cd2Sjpk close(fd);
117545916cd2Sjpk }
117645916cd2Sjpk
117745916cd2Sjpk mputm(md, R_PASS_PEER_CONNECTION, status);
117845916cd2Sjpk }
1179