Changeset 22 for trunk/src/sh_unix.c
- Timestamp:
- Feb 23, 2006, 12:03:58 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/sh_unix.c
r20 r22 307 307 *p = '0' + (u % 10); 308 308 u /= 10; 309 } while (u );310 if ( iisneg == 1) {309 } while (u && (p != str)); 310 if ((iisneg == 1) && (p != str)) { 311 311 --p; 312 312 *p = '-'; … … 323 323 extern int OnlyStderr; 324 324 325 int safe_logger (int signal, int method, pid_t thepid)325 int safe_logger (int signal, int method, char * details) 326 326 { 327 327 int i = 0; … … 331 331 char str[128]; 332 332 char * p; 333 333 334 334 char l0[64], l1[64], l2[64], l3[64]; 335 335 char a0[32], a1[32], a2[32]; 336 336 char e0[128]; 337 337 char msg[128]; 338 338 339 339 char * locations[] = { NULL, NULL, NULL, NULL, NULL }; 340 340 char * envp[] = { NULL, NULL }; 341 341 char * argp[] = { NULL, NULL, NULL, NULL, NULL }; 342 342 343 pid_t thepid = getpid(); 344 343 345 if ((sh.flag.isdaemon == S_FALSE) || (OnlyStderr == S_TRUE)) 344 346 method = 1; 345 347 346 348 /* seems that solaris cc needs this way of initializing ... 347 349 */ … … 350 352 locations[2] = l2; 351 353 locations[3] = l3; 352 354 353 355 envp[0] = e0; 354 356 355 357 argp[0] = a0; 356 358 argp[1] = a1; 357 359 argp[2] = a2; 358 359 strcpy (l0, _("/usr/bin/logger")); /* known to fit */ 360 strcpy (l1, _("/usr/sbin/logger")); /* known to fit */ 361 strcpy (l2, _("/usr/ucb/logger")); /* known to fit */ 362 strcpy (l3, _("/bin/logger")); /* known to fit */ 363 364 strcpy (a0, _("logger")); /* known to fit */ 365 strcpy (a1, _("-p")); /* known to fit */ 366 strcpy (a2, _("daemon.alert")); /* known to fit */ 367 368 strcpy (e0, /* known to fit */ 369 _("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin")); 370 360 371 361 sl_strlcpy(msg, _("samhain["), 128); 372 362 p = safe_itoa((int) thepid, str, 128); … … 375 365 if (signal == 0) 376 366 { 377 sl_strlcat(msg, _("]: out of memory"), 128); 367 if (details == NULL) { 368 sl_strlcat(msg, _("]: out of memory"), 128); 369 } else { 370 sl_strlcat(msg, _("]: "), 128); 371 sl_strlcat(msg, details, 128); 372 } 378 373 } 379 374 else … … 393 388 return 0; 394 389 } 390 391 sl_strlcpy (l0, _("/usr/bin/logger"), 64); 392 sl_strlcpy (l1, _("/usr/sbin/logger"), 64); 393 sl_strlcpy (l2, _("/usr/ucb/logger"), 64); 394 sl_strlcpy (l3, _("/bin/logger"), 64); 395 396 sl_strlcpy (a0, _("logger"), 32); 397 sl_strlcpy (a1, _("-p"), 32); 398 sl_strlcpy (a2, _("daemon.alert"), 32); 399 400 sl_strlcpy (e0, 401 _("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin"), 402 128); 403 395 404 while (locations[i] != NULL) { 396 405 status = stat(locations[i], &buf); … … 414 423 } 415 424 425 int safe_fatal (int signal, int method, char * details, 426 char * file, int line) 427 { 428 char msg[128]; 429 char str[128]; 430 char * p; 431 p = safe_itoa((int) line, str, 128); 432 sl_strlcpy(msg, _("FATAL: "), 128); 433 sl_strlcat(msg, file, 128); 434 sl_strlcat(msg, ": ", 128); 435 if (p && (*p)) { 436 sl_strlcat(msg, p , 128); 437 sl_strlcat(msg, ": ", 128); 438 } 439 sl_strlcat(msg, details, 128); 440 safe_logger (signal, method, msg); 441 _exit(EXIT_FAILURE); 442 } 416 443 417 444 extern char sh_sig_msg[64]; … … 451 478 { 452 479 chdir ("/"); 453 safe_logger (mysignal, 0, getpid());480 safe_logger (mysignal, 0, NULL); 454 481 } 455 482 _exit(mysignal); … … 504 531 memset (skey, '\0', sizeof(sh_key_t)); 505 532 if (immediate_exit_fast < 2) 506 safe_logger (mysignal, 0, getpid());533 safe_logger (mysignal, 0, NULL); 507 534 _exit(mysignal); 508 535 #else … … 518 545 close_ipc (); 519 546 #endif 520 safe_logger (mysignal, 0, getpid());547 safe_logger (mysignal, 0, NULL); 521 548 chdir ("/"); 522 549 raise(SIGFPE); … … 819 846 /* checksum the own binary 820 847 */ 821 int sh_unix_self_hash (c har * c)848 int sh_unix_self_hash (const char * c) 822 849 { 823 850 char message[512]; … … 891 918 892 919 /* added Tue Feb 22 10:36:44 NFT 2000 Rainer Wichmann */ 893 static int tf_add_trusted_user_int(c har * c)920 static int tf_add_trusted_user_int(const char * c) 894 921 { 895 922 register struct passwd * w; … … 919 946 } 920 947 921 int tf_add_trusted_user(c har * c)948 int tf_add_trusted_user(const char * c) 922 949 { 923 950 int i; … … 1229 1256 char ** env1; 1230 1257 int envlen = 0; 1258 size_t len; 1231 1259 1232 1260 SL_ENTER(_("sh_unix_copyenv")); … … 1248 1276 envlen = 0; 1249 1277 1250 while (env0 != NULL && env0[envlen] != NULL) { 1251 env1[envlen] = malloc (strlen(env0[envlen]) + 1); /* only once */ 1278 while (env0 != NULL && env0[envlen] != NULL) { 1279 len = strlen(env0[envlen]) + 1; 1280 env1[envlen] = malloc (len); /* only once */ 1252 1281 if (env1[envlen] == NULL) 1253 1282 { … … 1255 1284 SL_RET0(_("sh_unix_copyenv")); 1256 1285 } 1257 s trcpy(env1[envlen], env0[envlen]); /* known to fit */1286 sl_strlcpy(env1[envlen], env0[envlen], len); 1258 1287 ++envlen; 1259 1288 } … … 1435 1464 1436 1465 (void) uname (&buf); 1437 1466 /* flawfinder: ignore */ /* ff bug, ff sees system() */ 1438 1467 sl_strlcpy (sh.host.system, buf.sysname, SH_MINIBUF); 1439 1468 sl_strlcpy (sh.host.release, buf.release, SH_MINIBUF); … … 1639 1668 aud_exit(FIL__, __LINE__, EXIT_FAILURE); 1640 1669 } 1670 /* flawfinder: ignore */ 1641 1671 return (chroot(chroot_dir)); 1642 1672 } … … 1923 1953 } 1924 1954 1925 int sh_unix_settimeserver (c har * address)1955 int sh_unix_settimeserver (const char * address) 1926 1956 { 1927 1957 … … 2096 2126 /* whether to use localtime for file timesatams in logs 2097 2127 */ 2098 int sh_unix_uselocaltime (c har * c)2128 int sh_unix_uselocaltime (const char * c) 2099 2129 { 2100 2130 int i; … … 2732 2762 } 2733 2763 2734 int sh_unix_set_io_limit (c har * c)2764 int sh_unix_set_io_limit (const char * c) 2735 2765 { 2736 2766 long val; … … 2772 2802 if (tmpFile.size < fbuf->st_size) 2773 2803 { 2774 strcpy(fileHash, /* known to fit */ 2775 sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size, 2776 alert_timeout)); 2804 sl_strlcpy(fileHash, 2805 sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size, 2806 alert_timeout), 2807 KEY_LEN+1); 2777 2808 2778 2809 /* return */ … … 2781 2812 2782 2813 out: 2783 strcpy(fileHash, /* known to fit */ 2784 _("000000000000000000000000000000000000000000000000")); 2814 sl_strlcpy(fileHash, 2815 _("000000000000000000000000000000000000000000000000"), 2816 KEY_LEN+1); 2785 2817 SL_RETURN( -1, _("sh_unix_checksum_size")); 2786 2818 } … … 2903 2935 { 2904 2936 if (fileHash != NULL) 2905 strcpy(fileHash, /* known to fit */ 2906 _("000000000000000000000000000000000000000000000000")); 2937 sl_strlcpy(fileHash, 2938 _("000000000000000000000000000000000000000000000000"), 2939 KEY_LEN+1); 2907 2940 } 2908 2941 … … 2920 2953 if ((theFile->check_mask & MODI_CHK) == 0) 2921 2954 { 2922 strcpy(fileHash, /* known to fit */ 2923 _("000000000000000000000000000000000000000000000000")); 2955 sl_strlcpy(fileHash, 2956 _("000000000000000000000000000000000000000000000000"), 2957 KEY_LEN+1); 2924 2958 } 2925 2959 else if ((theFile->check_mask & MODI_PREL) != 0 && … … 2929 2963 if (0 != sh_prelink_run (theFile->fullpath, 2930 2964 fileHash, alert_timeout)) 2931 strcpy(fileHash, /* known to fit */ 2932 _("000000000000000000000000000000000000000000000000")); 2965 sl_strlcpy(fileHash, 2966 _("000000000000000000000000000000000000000000000000"), 2967 KEY_LEN+1); 2933 2968 } 2934 2969 else 2935 2970 { 2936 2971 tiger_fd = rval_open; 2937 strcpy(fileHash, /* known to fit */ 2938 sh_tiger_generic_hash (theFile->fullpath, TIGER_FD, 0, 2939 alert_timeout)); 2972 sl_strlcpy(fileHash, 2973 sh_tiger_generic_hash (theFile->fullpath, 2974 TIGER_FD, 0, 2975 alert_timeout), 2976 KEY_LEN+1); 2940 2977 if ((theFile->check_mask & MODI_SGROW) != 0) 2941 2978 { … … 2960 2997 if ((theFile->check_mask & MODI_CHK) == 0) 2961 2998 { 2962 strcpy(fileHash, /* known to fit */ 2963 _("000000000000000000000000000000000000000000000000")); 2999 sl_strlcpy(fileHash, 3000 _("000000000000000000000000000000000000000000000000"), 3001 KEY_LEN+1); 2964 3002 } 2965 3003 else if (policy == SH_LEVEL_PRELINK && … … 2969 3007 if (0 != sh_prelink_run (theFile->fullpath, 2970 3008 fileHash, alert_timeout)) 2971 strcpy(fileHash, /* known to fit */ 2972 _("000000000000000000000000000000000000000000000000")); 3009 sl_strlcpy(fileHash, 3010 _("000000000000000000000000000000000000000000000000"), 3011 KEY_LEN+1); 2973 3012 } 2974 3013 else … … 3145 3184 linknamebuf = SH_ALLOC(PATH_MAX); 3146 3185 3186 /* flawfinder: ignore */ 3147 3187 linksize = readlink (theFile->fullpath, linknamebuf, PATH_MAX-1); 3148 3188 … … 3160 3200 SH_FREE(tmp2); 3161 3201 SH_FREE(linknamebuf); 3202 theFile->linkpath[0] = '-'; 3203 theFile->linkpath[1] = '\0'; 3162 3204 SL_RETURN((-1),_("sh_unix_getinfo")); 3163 3205 }
Note:
See TracChangeset
for help on using the changeset viewer.