2 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
6 #pragma ident "%Z%%M% %I% %E% SMI"
9 * Routines for controlled update/initialization of request structures.
11 * request_init() initializes its argument. Pointers and string-valued members
12 * are initialized to zero, to indicate that no lookup has been attempted.
14 * request_set() adds information to an already initialized request structure.
16 * Both functions take a variable-length name-value list.
18 * Diagnostics are reported through syslog(3).
20 * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
23 static char sccsid
[] = "@(#) update.c 1.1 94/12/28 17:42:56";
25 /* System libraries */
38 /* request_fill - request update engine */
40 static struct request_info
*request_fill(request
, ap
)
41 struct request_info
*request
;
47 while ((key
= va_arg(ap
, int)) > 0) {
50 tcpd_warn("request_fill: invalid key: %d", key
);
53 request
->fd
= va_arg(ap
, int);
56 request
->client
->sin
= va_arg(ap
, struct sockaddr_gen
*);
59 request
->server
->sin
= va_arg(ap
, struct sockaddr_gen
*);
63 * All other fields are strings with the same maximal length.
67 ptr
= request
->daemon
;
73 ptr
= request
->client
->name
;
76 ptr
= request
->client
->addr
;
79 ptr
= request
->server
->name
;
82 ptr
= request
->server
->addr
;
85 STRN_CPY(ptr
, va_arg(ap
, char *), STRING_LENGTH
);
90 /* request_init - initialize request structure */
92 struct request_info
*VARARGS(request_init
, struct request_info
*, request
)
94 static struct request_info default_info
;
95 struct request_info
*r
;
99 * Initialize data members. We do not assign default function pointer
100 * members, to avoid pulling in the whole socket module when it is not
103 VASTART(ap
, struct request_info
*, request
);
104 *request
= default_info
;
106 strcpy(request
->daemon
, unknown
);
107 sprintf(request
->pid
, "%d", getpid());
108 request
->client
->request
= request
;
109 request
->server
->request
= request
;
110 r
= request_fill(request
, ap
);
115 /* request_set - update request structure */
117 struct request_info
*VARARGS(request_set
, struct request_info
*, request
)
119 struct request_info
*r
;
122 VASTART(ap
, struct request_info
*, request
);
123 r
= request_fill(request
, ap
);