1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1999, 2001 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 #include <sys/types.h>
28 #include <stdio.h>
29 #include <string.h>
30 #include <stdlib.h>
31 #include <nss_dbdefs.h>
32 #include <auth_attr.h>
33
34
35 /* Externs from libnsl */
36 extern authstr_t *_getauthnam(const char *, authstr_t *, char *, int, int *);
37 extern authstr_t *_getauthattr(authstr_t *, char *, int, int *);
38 extern void _setauthattr();
39 extern void _endauthattr(void);
40
41
42 static authattr_t *authstr2attr(authstr_t *);
43
44
45 authattr_t *
getauthattr()46 getauthattr()
47 {
48 int err = 0;
49 char buf[NSS_BUFLEN_AUTHATTR];
50 authstr_t auth;
51 authstr_t *tmp;
52
53 (void) memset(&auth, 0, sizeof (authstr_t));
54 tmp = _getauthattr(&auth, buf, NSS_BUFLEN_AUTHATTR, &err);
55 return (authstr2attr(tmp));
56 }
57
58
59 authattr_t *
getauthnam(const char * name)60 getauthnam(const char *name)
61 {
62 int err = 0;
63 char buf[NSS_BUFLEN_AUTHATTR];
64 authstr_t auth;
65 authstr_t *tmp;
66
67 if (name == NULL) {
68 return ((authattr_t *)NULL);
69 }
70 (void) memset(&auth, 0, sizeof (authstr_t));
71 tmp = _getauthnam(name, &auth, buf, NSS_BUFLEN_AUTHATTR, &err);
72 return (authstr2attr(tmp));
73 }
74
75
76 void
setauthattr(void)77 setauthattr(void)
78 {
79 _setauthattr();
80 }
81
82
83 void
endauthattr()84 endauthattr()
85 {
86 _endauthattr();
87 }
88
89
90 void
free_authattr(authattr_t * auth)91 free_authattr(authattr_t *auth)
92 {
93 if (auth) {
94 free(auth->name);
95 free(auth->res1);
96 free(auth->res2);
97 free(auth->short_desc);
98 free(auth->long_desc);
99 _kva_free(auth->attr);
100 free(auth);
101 }
102 }
103
104
105 static authattr_t *
authstr2attr(authstr_t * auth)106 authstr2attr(authstr_t *auth)
107 {
108 authattr_t *newauth;
109
110 if (auth == NULL)
111 return ((authattr_t *)NULL);
112
113 if ((newauth = (authattr_t *)malloc(sizeof (authattr_t))) == NULL)
114 return ((authattr_t *)NULL);
115
116 newauth->name = _do_unescape(auth->name);
117 newauth->res1 = _do_unescape(auth->res1);
118 newauth->res2 = _do_unescape(auth->res2);
119 newauth->short_desc = _do_unescape(auth->short_desc);
120 newauth->long_desc = _do_unescape(auth->long_desc);
121 newauth->attr = _str2kva(auth->attr, KV_ASSIGN, KV_DELIMITER);
122 return (newauth);
123 }
124
125
126 #ifdef DEBUG
127 void
print_authattr(authattr_t * auth)128 print_authattr(authattr_t *auth)
129 {
130 extern void print_kva(kva_t *);
131 char *empty = "empty";
132
133 if (auth == NULL) {
134 printf("NULL\n");
135 return;
136 }
137
138 printf("name=%s\n", auth->name ? auth->name : empty);
139 printf("res1=%s\n", auth->res1 ? auth->res1 : empty);
140 printf("res2=%s\n", auth->res2 ? auth->res2 : empty);
141 printf("short_desc=%s\n", auth->short_desc ? auth->short_desc : empty);
142 printf("long_desc=%s\n", auth->long_desc ? auth->long_desc : empty);
143 printf("attr=\n");
144 print_kva(auth->attr);
145 fflush(stdout);
146 }
147 #endif /* DEBUG */
148