2989 Eliminate use of LOGNAME_MAX in ON
1166 useradd have warning with name more 8 chars
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 (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 /* Copyright (c) 1988 AT&T */
28 /* All Rights Reserved */
29
30 /* sysconf(3C) - returns system configuration information */
31
32 #pragma weak _sysconf = sysconf
33
34 #include "lint.h"
35 #include <mtlib.h>
36 #include <sys/types.h>
37 #include <unistd.h>
38 #include <sys/sysconfig.h>
39 #include <limits.h>
40 #include <time.h>
41 #include <errno.h>
42 #include <nss_dbdefs.h>
43 #include <thread.h>
44 #include <xti.h>
45 #include "libc.h"
46 #include "xpg6.h"
47
48 /* from nss_common.c */
49 extern size_t _nss_get_bufsizes(int);
50
51 long
52 sysconf(int name)
53 {
54 static int _pagesize = 0;
55 static int _hz = 0;
56 static pid_t _maxpid = 0;
57 static int _stackprot = 0;
58 static int _ngroups_max;
59 extern int __xpg4;
60
61 switch (name) {
62 default:
63 errno = EINVAL;
64 return (-1L);
65
66 case _SC_ARG_MAX:
67 return ((long)ARG_MAX);
68
69 case _SC_CLK_TCK:
70 if (_hz <= 0)
71 _hz = _sysconfig(_CONFIG_CLK_TCK);
72 return (_hz);
73
74 case _SC_JOB_CONTROL:
75 return ((long)_POSIX_JOB_CONTROL);
76
77 case _SC_SAVED_IDS:
78 return ((long)_POSIX_SAVED_IDS);
79
80 case _SC_CHILD_MAX:
81 return (_sysconfig(_CONFIG_CHILD_MAX));
82
83 case _SC_NGROUPS_MAX:
84 if (_ngroups_max <= 0)
85 _ngroups_max = _sysconfig(_CONFIG_NGROUPS);
86 return (_ngroups_max);
87
88 case _SC_OPEN_MAX:
89 return (_sysconfig(_CONFIG_OPEN_FILES));
90
91 case _SC_VERSION:
92 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
93 return (200112L);
94 else
95 return (199506L);
96
97 case _SC_PAGESIZE:
98 if (_pagesize <= 0)
99 _pagesize = _sysconfig(_CONFIG_PAGESIZE);
100 return (_pagesize);
101
102 case _SC_XOPEN_VERSION:
103 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
104 return (600L);
105 else if (__xpg4 == 0)
106 return (_sysconfig(_CONFIG_XOPEN_VER));
107 else
108 return (4L);
109
110 case _SC_XOPEN_XCU_VERSION:
111 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
112 return (600L);
113 else
114 return (4L);
115
116 /*
117 * old value for pre XPG5 conformant systems to match
118 * getpass() length.
119 * XPG5 special cased with __sysconf_xpg5()
120 * new value for default and modern XPG systems.
121 */
122 case _SC_PASS_MAX:
123 if ((__xpg4 == 1) &&
124 (!(__xpg6 & _C99SUSv3_XPG6_sysconf_version)))
125 return ((long)_PASS_MAX_XPG);
126 else
127 return ((long)_PASS_MAX);
128
129 case _SC_LOGNAME_MAX:
130 return ((long)LOGNAME_MAX);
131
132 case _SC_STREAM_MAX:
133 return (_sysconfig(_CONFIG_OPEN_FILES));
134
135 case _SC_TZNAME_MAX:
136 return (-1L);
137
138 case _SC_NPROCESSORS_CONF:
139 return (_sysconfig(_CONFIG_NPROC_CONF));
140
141 case _SC_NPROCESSORS_ONLN:
142 return (_sysconfig(_CONFIG_NPROC_ONLN));
143
144 case _SC_NPROCESSORS_MAX:
145 return (_sysconfig(_CONFIG_NPROC_MAX));
146
147 case _SC_STACK_PROT:
148 if (_stackprot == 0)
149 _stackprot = _sysconfig(_CONFIG_STACK_PROT);
150 return (_stackprot);
151
152 /* POSIX.4 names */
153
154 /*
155 * Each of the following also have _POSIX_* symbols
156 * defined in <unistd.h>. Values here should align
157 * with values in the header. Up until the SUSv3 standard
158 * we defined these simply as 1. With the introduction
159 * of the new revision, these were changed to 200112L.
160 * The standard allows us to change the value, however,
161 * we have kept both values in case application programs
162 * are relying on the previous value even though an
163 * application doing so is technically wrong.
164 */
165 case _SC_ASYNCHRONOUS_IO:
166 case _SC_FSYNC:
167 case _SC_MAPPED_FILES:
168 case _SC_MEMLOCK:
169 case _SC_MEMLOCK_RANGE:
170 case _SC_MEMORY_PROTECTION:
171 case _SC_MESSAGE_PASSING:
172 case _SC_PRIORITY_SCHEDULING:
173 case _SC_REALTIME_SIGNALS:
174 case _SC_SEMAPHORES:
175 case _SC_SHARED_MEMORY_OBJECTS:
176 case _SC_SYNCHRONIZED_IO:
177 case _SC_TIMERS:
178 if (__xpg6 & _C99SUSv3_mode_ON)
179 return (200112L);
180 else
181 return (1L);
182
183 case _SC_PRIORITIZED_IO:
184 #ifdef _POSIX_PRIORITIZED_IO
185 return (1L);
186 #else
187 return (-1L);
188 #endif
189
190 case _SC_AIO_LISTIO_MAX:
191 return (_sysconfig(_CONFIG_AIO_LISTIO_MAX));
192
193 case _SC_AIO_MAX:
194 return (_sysconfig(_CONFIG_AIO_MAX));
195
196 case _SC_AIO_PRIO_DELTA_MAX:
197 return (_sysconfig(_CONFIG_AIO_PRIO_DELTA_MAX));
198
199 case _SC_DELAYTIMER_MAX:
200 return (_sysconfig(_CONFIG_DELAYTIMER_MAX));
201
202 case _SC_MQ_OPEN_MAX:
203 return (_sysconfig(_CONFIG_MQ_OPEN_MAX));
204
205 case _SC_MQ_PRIO_MAX:
206 return (_sysconfig(_CONFIG_MQ_PRIO_MAX));
207
208 case _SC_RTSIG_MAX:
209 return (_sysconfig(_CONFIG_RTSIG_MAX));
210
211 case _SC_SEM_NSEMS_MAX:
212 return (_sysconfig(_CONFIG_SEM_NSEMS_MAX));
213
214 case _SC_SEM_VALUE_MAX:
215 return (_sysconfig(_CONFIG_SEM_VALUE_MAX));
216
217 case _SC_SIGQUEUE_MAX:
218 return (_sysconfig(_CONFIG_SIGQUEUE_MAX));
219
220 case _SC_SIGRT_MAX:
221 return (_sysconfig(_CONFIG_SIGRT_MAX));
222
223 case _SC_SIGRT_MIN:
224 return (_sysconfig(_CONFIG_SIGRT_MIN));
225
226 case _SC_TIMER_MAX:
227 return (_sysconfig(_CONFIG_TIMER_MAX));
228
229 case _SC_PHYS_PAGES:
230 return (_sysconfig(_CONFIG_PHYS_PAGES));
231
232 case _SC_AVPHYS_PAGES:
233 return (_sysconfig(_CONFIG_AVPHYS_PAGES));
234
235 /* XPG4/POSIX.1-1990/POSIX.2-1992 names */
236 case _SC_2_C_BIND:
237 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
238 return (200112L);
239 else
240 return (1L);
241
242 case _SC_2_CHAR_TERM:
243 return ((long)_POSIX2_CHAR_TERM);
244
245 case _SC_2_C_DEV:
246 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
247 return (200112L);
248 else
249 return (1L);
250
251 case _SC_2_C_VERSION:
252 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
253 return (200112L);
254 else
255 return (199209L);
256
257 case _SC_2_FORT_DEV:
258 return (-1L);
259
260 case _SC_2_FORT_RUN:
261 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
262 return (200112L);
263 else
264 return (1L);
265
266 case _SC_2_LOCALEDEF:
267 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
268 return (200112L);
269 else
270 return (1L);
271
272 case _SC_2_SW_DEV:
273 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
274 return (200112L);
275 else
276 return (1L);
277
278 case _SC_2_UPE:
279 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
280 return (200112L);
281 else
282 return (1L);
283
284 case _SC_2_VERSION:
285 if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
286 return (200112L);
287 else
288 return (199209L);
289
290 case _SC_BC_BASE_MAX:
291 return ((long)BC_BASE_MAX);
292
293 case _SC_BC_DIM_MAX:
294 return ((long)BC_DIM_MAX);
295
296 case _SC_BC_SCALE_MAX:
297 return ((long)BC_SCALE_MAX);
298
299 case _SC_BC_STRING_MAX:
300 return ((long)BC_STRING_MAX);
301
302 case _SC_COLL_WEIGHTS_MAX:
303 return ((long)COLL_WEIGHTS_MAX);
304
305 case _SC_EXPR_NEST_MAX:
306 return ((long)EXPR_NEST_MAX);
307
308 case _SC_LINE_MAX:
309 return ((long)LINE_MAX);
310
311 case _SC_RE_DUP_MAX:
312 return ((long)RE_DUP_MAX);
313
314 case _SC_XOPEN_CRYPT:
315 return (1L);
316
317 case _SC_XOPEN_ENH_I18N:
318 return ((long)_XOPEN_ENH_I18N);
319
320 case _SC_XOPEN_SHM:
321 return ((long)_XOPEN_SHM);
322
323 /* XPG4v2 (SUS) names */
324 case _SC_XOPEN_UNIX:
325 return (1L);
326
327 case _SC_XOPEN_LEGACY:
328 return (1L);
329
330 case _SC_ATEXIT_MAX:
331 return (-1L);
332
333 case _SC_IOV_MAX:
334 return ((long)IOV_MAX);
335
336 case _SC_T_IOV_MAX:
337 return ((long)T_IOV_MAX);
338
339 /* XPG5 (SUSv2) names */
340 case _SC_XOPEN_REALTIME:
341 return (1L);
342
343 case _SC_XOPEN_REALTIME_THREADS:
344 #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && \
345 defined(_POSIX_THREAD_PRIO_INHERIT) && \
346 defined(_POSIX_THREAD_PRIO_PROTECT)
347 return (1L);
348 #else
349 return (-1L);
350 #endif
351
352 case _SC_XBS5_ILP32_OFF32:
353 return (1L);
354
355 case _SC_XBS5_ILP32_OFFBIG:
356 return (1L);
357
358 case _SC_XBS5_LP64_OFF64:
359 return (1L);
360
361 case _SC_XBS5_LPBIG_OFFBIG:
362 return (1L);
363
364 /* POSIX.1c names */
365 case _SC_THREAD_DESTRUCTOR_ITERATIONS:
366 return (-1L);
367
368 case _SC_GETGR_R_SIZE_MAX:
369 return ((long)_nss_get_bufsizes(_SC_GETGR_R_SIZE_MAX));
370
371 case _SC_GETPW_R_SIZE_MAX:
372 return ((long)NSS_BUFLEN_PASSWD);
373
374 case _SC_LOGIN_NAME_MAX:
375 return ((long)(LOGNAME_MAX + 1));
376
377 case _SC_THREAD_KEYS_MAX:
378 return (-1L);
379
380 case _SC_THREAD_STACK_MIN:
381 return ((long)thr_min_stack());
382
383 case _SC_THREAD_THREADS_MAX:
384 return (-1L);
385
386 case _SC_TTY_NAME_MAX:
387 return ((long)TTYNAME_MAX);
388
389 case _SC_BARRIERS:
390 return ((long)_POSIX_BARRIERS);
391
392 case _SC_CLOCK_SELECTION:
393 return ((long)_POSIX_CLOCK_SELECTION);
394
395 case _SC_MONOTONIC_CLOCK:
396 return ((long)_POSIX_MONOTONIC_CLOCK);
397
398 case _SC_SPAWN:
399 return ((long)_POSIX_SPAWN);
400
401 case _SC_SPIN_LOCKS:
402 return ((long)_POSIX_SPIN_LOCKS);
403
404 case _SC_THREADS:
405 case _SC_THREAD_ATTR_STACKADDR:
406 case _SC_THREAD_ATTR_STACKSIZE:
407 case _SC_THREAD_PRIORITY_SCHEDULING:
408 case _SC_THREAD_PRIO_INHERIT:
409 case _SC_THREAD_PRIO_PROTECT:
410 case _SC_THREAD_PROCESS_SHARED:
411 case _SC_THREAD_SAFE_FUNCTIONS:
412 if (__xpg6 & _C99SUSv3_mode_ON)
413 return (200112L);
414 else
415 return (1L);
416
417 case _SC_TIMEOUTS:
418 return ((long)_POSIX_TIMEOUTS);
419
420 /* 1216676 - cache info */
421 case _SC_COHER_BLKSZ:
422 return (_sysconfig(_CONFIG_COHERENCY));
423
424 case _SC_SPLIT_CACHE:
425 return (_sysconfig(_CONFIG_SPLIT_CACHE));
426
427 case _SC_ICACHE_SZ:
428 return (_sysconfig(_CONFIG_ICACHESZ));
429
430 case _SC_DCACHE_SZ:
431 return (_sysconfig(_CONFIG_DCACHESZ));
432
433 case _SC_ICACHE_LINESZ:
434 return (_sysconfig(_CONFIG_ICACHELINESZ));
435
436 case _SC_DCACHE_LINESZ:
437 return (_sysconfig(_CONFIG_DCACHELINESZ));
438
439 case _SC_ICACHE_BLKSZ:
440 return (_sysconfig(_CONFIG_ICACHEBLKSZ));
441
442 case _SC_DCACHE_BLKSZ:
443 return (_sysconfig(_CONFIG_DCACHEBLKSZ));
444
445 case _SC_DCACHE_TBLKSZ:
446 return (_sysconfig(_CONFIG_DCACHETBLKSZ));
447
448 case _SC_ICACHE_ASSOC:
449 return (_sysconfig(_CONFIG_ICACHE_ASSOC));
450
451 case _SC_DCACHE_ASSOC:
452 return (_sysconfig(_CONFIG_DCACHE_ASSOC));
453
454 case _SC_MAXPID:
455 if (_maxpid <= 0)
456 _maxpid = _sysconfig(_CONFIG_MAXPID);
457 return (_maxpid);
458
459 case _SC_CPUID_MAX:
460 return (_sysconfig(_CONFIG_CPUID_MAX));
461
462 case _SC_EPHID_MAX:
463 return (_sysconfig(_CONFIG_EPHID_MAX));
464
465 /* UNIX 03 names - XPG6/SUSv3/POSIX.1-2001 */
466
467 case _SC_REGEXP:
468 return ((long)_POSIX_REGEXP);
469
470 case _SC_SHELL:
471 return ((long)_POSIX_SHELL);
472
473 case _SC_ADVISORY_INFO:
474 return ((long)_POSIX_ADVISORY_INFO);
475
476 case _SC_HOST_NAME_MAX:
477 return ((long)_POSIX_HOST_NAME_MAX);
478
479 case _SC_READER_WRITER_LOCKS:
480 return ((long)_POSIX_READER_WRITER_LOCKS);
481
482 case _SC_IPV6:
483 return ((long)_POSIX_IPV6);
484
485 case _SC_RAW_SOCKETS:
486 return ((long)_POSIX_RAW_SOCKETS);
487
488 case _SC_XOPEN_STREAMS:
489 return ((long)_XOPEN_STREAMS);
490
491 case _SC_SYMLOOP_MAX:
492 return (_sysconfig(_CONFIG_SYMLOOP_MAX));
493
494 case _SC_V6_ILP32_OFF32:
495 return (1L);
496
497 case _SC_V6_ILP32_OFFBIG:
498 return (1L);
499
500 case _SC_V6_LP64_OFF64:
501 return (1L);
502
503 case _SC_V6_LPBIG_OFFBIG:
504 return (1L);
505
506 /* Unsupported UNIX 03 options */
507 case _SC_2_PBS:
508 case _SC_2_PBS_ACCOUNTING:
509 case _SC_2_PBS_CHECKPOINT:
510 case _SC_2_PBS_LOCATE:
511 case _SC_2_PBS_MESSAGE:
512 case _SC_2_PBS_TRACK:
513 case _SC_CPUTIME:
514 case _SC_SPORADIC_SERVER:
515 case _SC_SS_REPL_MAX:
516 case _SC_THREAD_CPUTIME:
517 case _SC_THREAD_SPORADIC_SERVER:
518 case _SC_TRACE:
519 case _SC_TRACE_EVENT_FILTER:
520 case _SC_TRACE_EVENT_NAME_MAX:
521 case _SC_TRACE_INHERIT:
522 case _SC_TRACE_LOG:
523 case _SC_TRACE_NAME_MAX:
524 case _SC_TRACE_SYS_MAX:
525 case _SC_TRACE_USER_EVENT_MAX:
526 case _SC_TYPED_MEMORY_OBJECTS:
527 return (-1L);
528 }
529 }
530
531 /*
532 * UNIX 98 version of sysconf needed in order to set _XOPEN_VERSION to 500.
533 */
534
535 long
536 __sysconf_xpg5(int name)
537 {
538 switch (name) {
539 default:
540 return (sysconf(name));
541 case _SC_XOPEN_VERSION:
542 return (500L);
543 case _SC_PASS_MAX:
544 return ((long)_PASS_MAX_XPG);
545 }
546 }
--- EOF ---