Changes in trunk/src/sh_unix.c [20:30]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/sh_unix.c
r20 r30 127 127 unsigned long mask_USER0 = MASK_USER_; 128 128 unsigned long mask_USER1 = MASK_USER_; 129 unsigned long mask_USER2 = MASK_USER_; 130 unsigned long mask_USER3 = MASK_USER_; 131 unsigned long mask_USER4 = MASK_USER_; 129 132 unsigned long mask_ALLIGNORE = MASK_ALLIGNORE_; 130 133 unsigned long mask_ATTRIBUTES = MASK_ATTRIBUTES_; … … 142 145 mask_USER0 = MASK_USER_; 143 146 mask_USER1 = MASK_USER_; 147 mask_USER2 = MASK_USER_; 148 mask_USER3 = MASK_USER_; 149 mask_USER4 = MASK_USER_; 144 150 mask_ALLIGNORE = MASK_ALLIGNORE_; 145 151 mask_ATTRIBUTES = MASK_ATTRIBUTES_; … … 307 313 *p = '0' + (u % 10); 308 314 u /= 10; 309 } while (u );310 if ( iisneg == 1) {315 } while (u && (p != str)); 316 if ((iisneg == 1) && (p != str)) { 311 317 --p; 312 318 *p = '-'; … … 323 329 extern int OnlyStderr; 324 330 325 int safe_logger (int signal, int method, pid_t thepid)331 int safe_logger (int signal, int method, char * details) 326 332 { 327 333 int i = 0; … … 331 337 char str[128]; 332 338 char * p; 333 339 334 340 char l0[64], l1[64], l2[64], l3[64]; 335 341 char a0[32], a1[32], a2[32]; 336 342 char e0[128]; 337 343 char msg[128]; 338 344 339 345 char * locations[] = { NULL, NULL, NULL, NULL, NULL }; 340 346 char * envp[] = { NULL, NULL }; 341 347 char * argp[] = { NULL, NULL, NULL, NULL, NULL }; 342 348 349 pid_t thepid = getpid(); 350 343 351 if ((sh.flag.isdaemon == S_FALSE) || (OnlyStderr == S_TRUE)) 344 352 method = 1; 345 353 346 354 /* seems that solaris cc needs this way of initializing ... 347 355 */ … … 350 358 locations[2] = l2; 351 359 locations[3] = l3; 352 360 353 361 envp[0] = e0; 354 362 355 363 argp[0] = a0; 356 364 argp[1] = a1; 357 365 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 366 371 367 sl_strlcpy(msg, _("samhain["), 128); 372 368 p = safe_itoa((int) thepid, str, 128); … … 375 371 if (signal == 0) 376 372 { 377 sl_strlcat(msg, _("]: out of memory"), 128); 373 if (details == NULL) { 374 sl_strlcat(msg, _("]: out of memory"), 128); 375 } else { 376 sl_strlcat(msg, _("]: "), 128); 377 sl_strlcat(msg, details, 128); 378 } 378 379 } 379 380 else … … 393 394 return 0; 394 395 } 396 397 sl_strlcpy (l0, _("/usr/bin/logger"), 64); 398 sl_strlcpy (l1, _("/usr/sbin/logger"), 64); 399 sl_strlcpy (l2, _("/usr/ucb/logger"), 64); 400 sl_strlcpy (l3, _("/bin/logger"), 64); 401 402 sl_strlcpy (a0, _("logger"), 32); 403 sl_strlcpy (a1, _("-p"), 32); 404 sl_strlcpy (a2, _("daemon.alert"), 32); 405 406 sl_strlcpy (e0, 407 _("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin"), 408 128); 409 395 410 while (locations[i] != NULL) { 396 411 status = stat(locations[i], &buf); … … 414 429 } 415 430 431 void safe_fatal (int signal, int method, char * details, 432 char * file, int line) 433 { 434 char msg[128]; 435 char str[128]; 436 char * p; 437 p = safe_itoa((int) line, str, 128); 438 sl_strlcpy(msg, _("FATAL: "), 128); 439 sl_strlcat(msg, file, 128); 440 sl_strlcat(msg, ": ", 128); 441 if (p && (*p)) { 442 sl_strlcat(msg, p , 128); 443 sl_strlcat(msg, ": ", 128); 444 } 445 sl_strlcat(msg, details, 128); 446 safe_logger (signal, method, msg); 447 _exit(EXIT_FAILURE); 448 } 416 449 417 450 extern char sh_sig_msg[64]; … … 451 484 { 452 485 chdir ("/"); 453 safe_logger (mysignal, 0, getpid());486 safe_logger (mysignal, 0, NULL); 454 487 } 455 488 _exit(mysignal); … … 504 537 memset (skey, '\0', sizeof(sh_key_t)); 505 538 if (immediate_exit_fast < 2) 506 safe_logger (mysignal, 0, getpid());539 safe_logger (mysignal, 0, NULL); 507 540 _exit(mysignal); 508 541 #else … … 518 551 close_ipc (); 519 552 #endif 520 safe_logger (mysignal, 0, getpid());553 safe_logger (mysignal, 0, NULL); 521 554 chdir ("/"); 522 555 raise(SIGFPE); … … 819 852 /* checksum the own binary 820 853 */ 821 int sh_unix_self_hash (c har * c)854 int sh_unix_self_hash (const char * c) 822 855 { 823 856 char message[512]; … … 891 924 892 925 /* added Tue Feb 22 10:36:44 NFT 2000 Rainer Wichmann */ 893 static int tf_add_trusted_user_int(c har * c)926 static int tf_add_trusted_user_int(const char * c) 894 927 { 895 928 register struct passwd * w; … … 919 952 } 920 953 921 int tf_add_trusted_user(c har * c)954 int tf_add_trusted_user(const char * c) 922 955 { 923 956 int i; … … 1229 1262 char ** env1; 1230 1263 int envlen = 0; 1264 size_t len; 1231 1265 1232 1266 SL_ENTER(_("sh_unix_copyenv")); … … 1248 1282 envlen = 0; 1249 1283 1250 while (env0 != NULL && env0[envlen] != NULL) { 1251 env1[envlen] = malloc (strlen(env0[envlen]) + 1); /* only once */ 1284 while (env0 != NULL && env0[envlen] != NULL) { 1285 len = strlen(env0[envlen]) + 1; 1286 env1[envlen] = malloc (len); /* only once */ 1252 1287 if (env1[envlen] == NULL) 1253 1288 { … … 1255 1290 SL_RET0(_("sh_unix_copyenv")); 1256 1291 } 1257 s trcpy(env1[envlen], env0[envlen]); /* known to fit */1292 sl_strlcpy(env1[envlen], env0[envlen], len); 1258 1293 ++envlen; 1259 1294 } … … 1416 1451 #include <arpa/inet.h> 1417 1452 1453 char * sh_unix_h_name (struct hostent * host_entry) 1454 { 1455 char ** p; 1456 if (strchr(host_entry->h_name, '.')) { 1457 return host_entry->h_name; 1458 } else { 1459 for (p = host_entry->h_aliases; *p; ++p) { 1460 if (strchr(*p, '.')) 1461 return *p; 1462 } 1463 } 1464 return host_entry->h_name; 1465 } 1466 1418 1467 /* uname() on FreeBSD is broken, because the 'nodename' buf is too small 1419 1468 * to hold a valid (leftmost) domain label. … … 1435 1484 1436 1485 (void) uname (&buf); 1437 1486 /* flawfinder: ignore */ /* ff bug, ff sees system() */ 1438 1487 sl_strlcpy (sh.host.system, buf.sysname, SH_MINIBUF); 1439 1488 sl_strlcpy (sh.host.release, buf.release, SH_MINIBUF); … … 1486 1535 else 1487 1536 { 1488 sl_strlcpy (sh.host.name, he1->h_name, SH_PATHBUF);1537 sl_strlcpy (sh.host.name, sh_unix_h_name(he1), SH_PATHBUF); 1489 1538 } 1490 1539 … … 1534 1583 if (he1 != NULL) 1535 1584 { 1536 sl_strlcpy (sh.host.name, he1->h_name, SH_PATHBUF);1585 sl_strlcpy (sh.host.name, sh_unix_h_name(he1), SH_PATHBUF); 1537 1586 } 1538 1587 else … … 1639 1688 aud_exit(FIL__, __LINE__, EXIT_FAILURE); 1640 1689 } 1690 /* flawfinder: ignore */ 1641 1691 return (chroot(chroot_dir)); 1642 1692 } … … 1923 1973 } 1924 1974 1925 int sh_unix_settimeserver (c har * address)1975 int sh_unix_settimeserver (const char * address) 1926 1976 { 1927 1977 … … 2096 2146 /* whether to use localtime for file timesatams in logs 2097 2147 */ 2098 int sh_unix_uselocaltime (c har * c)2148 int sh_unix_uselocaltime (const char * c) 2099 2149 { 2100 2150 int i; … … 2732 2782 } 2733 2783 2734 int sh_unix_set_io_limit (c har * c)2784 int sh_unix_set_io_limit (const char * c) 2735 2785 { 2736 2786 long val; … … 2772 2822 if (tmpFile.size < fbuf->st_size) 2773 2823 { 2774 strcpy(fileHash, /* known to fit */ 2775 sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size, 2776 alert_timeout)); 2824 sl_strlcpy(fileHash, 2825 sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size, 2826 alert_timeout), 2827 KEY_LEN+1); 2777 2828 2778 2829 /* return */ … … 2781 2832 2782 2833 out: 2783 strcpy(fileHash, /* known to fit */ 2784 _("000000000000000000000000000000000000000000000000")); 2834 sl_strlcpy(fileHash, 2835 _("000000000000000000000000000000000000000000000000"), 2836 KEY_LEN+1); 2785 2837 SL_RETURN( -1, _("sh_unix_checksum_size")); 2786 2838 } … … 2903 2955 { 2904 2956 if (fileHash != NULL) 2905 strcpy(fileHash, /* known to fit */ 2906 _("000000000000000000000000000000000000000000000000")); 2957 sl_strlcpy(fileHash, 2958 _("000000000000000000000000000000000000000000000000"), 2959 KEY_LEN+1); 2907 2960 } 2908 2961 … … 2920 2973 if ((theFile->check_mask & MODI_CHK) == 0) 2921 2974 { 2922 strcpy(fileHash, /* known to fit */ 2923 _("000000000000000000000000000000000000000000000000")); 2975 sl_strlcpy(fileHash, 2976 _("000000000000000000000000000000000000000000000000"), 2977 KEY_LEN+1); 2924 2978 } 2925 2979 else if ((theFile->check_mask & MODI_PREL) != 0 && … … 2929 2983 if (0 != sh_prelink_run (theFile->fullpath, 2930 2984 fileHash, alert_timeout)) 2931 strcpy(fileHash, /* known to fit */ 2932 _("000000000000000000000000000000000000000000000000")); 2985 sl_strlcpy(fileHash, 2986 _("000000000000000000000000000000000000000000000000"), 2987 KEY_LEN+1); 2933 2988 } 2934 2989 else 2935 2990 { 2936 2991 tiger_fd = rval_open; 2937 strcpy(fileHash, /* known to fit */ 2938 sh_tiger_generic_hash (theFile->fullpath, TIGER_FD, 0, 2939 alert_timeout)); 2992 sl_strlcpy(fileHash, 2993 sh_tiger_generic_hash (theFile->fullpath, 2994 TIGER_FD, 0, 2995 alert_timeout), 2996 KEY_LEN+1); 2940 2997 if ((theFile->check_mask & MODI_SGROW) != 0) 2941 2998 { … … 2960 3017 if ((theFile->check_mask & MODI_CHK) == 0) 2961 3018 { 2962 strcpy(fileHash, /* known to fit */ 2963 _("000000000000000000000000000000000000000000000000")); 3019 sl_strlcpy(fileHash, 3020 _("000000000000000000000000000000000000000000000000"), 3021 KEY_LEN+1); 2964 3022 } 2965 3023 else if (policy == SH_LEVEL_PRELINK && … … 2969 3027 if (0 != sh_prelink_run (theFile->fullpath, 2970 3028 fileHash, alert_timeout)) 2971 strcpy(fileHash, /* known to fit */ 2972 _("000000000000000000000000000000000000000000000000")); 3029 sl_strlcpy(fileHash, 3030 _("000000000000000000000000000000000000000000000000"), 3031 KEY_LEN+1); 2973 3032 } 2974 3033 else … … 3145 3204 linknamebuf = SH_ALLOC(PATH_MAX); 3146 3205 3206 /* flawfinder: ignore */ 3147 3207 linksize = readlink (theFile->fullpath, linknamebuf, PATH_MAX-1); 3148 3208 … … 3160 3220 SH_FREE(tmp2); 3161 3221 SH_FREE(linknamebuf); 3222 theFile->linkpath[0] = '-'; 3223 theFile->linkpath[1] = '\0'; 3162 3224 SL_RETURN((-1),_("sh_unix_getinfo")); 3163 3225 } … … 3982 4044 { 3983 4045 #ifdef WITH_TPT 3984 sl_snprintf(str, 128, _("file: %s line: %d page: %d"),4046 sl_snprintf(str, sizeof(str), _("file: %s line: %d page: %d"), 3985 4047 page_list->file, page_list->line, i+1); 3986 4048 sh_error_handle(SH_ERR_INFO, FIL__, __LINE__, i, MSG_E_SUBGEN, … … 3990 4052 ++i; 3991 4053 } 3992 sl_snprintf(str, 128, _("%d pages locked"), i);4054 sl_snprintf(str, sizeof(str), _("%d pages locked"), i); 3993 4055 sh_error_handle(SH_ERR_INFO, FIL__, __LINE__, i, MSG_E_SUBGEN, 3994 4056 str, _("sh_unix_count_mlock"));
Note:
See TracChangeset
for help on using the changeset viewer.