proctitle.c
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:2k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. #include <includes.h>
  2. #include <stdarg.h>
  3. #ifndef HAVE_SETPROCTITLE
  4. #ifdef __linux__
  5. #include "proctitle.h"
  6.  static char **Argv = NULL; /* pointer to argument vector */
  7.  static char *LastArgv = NULL; /* end of argv */
  8.  static char    *MyName = NULL;
  9.  void initsetproctitle(argc, argv, envp)
  10. int argc;
  11. char **argv;
  12. char **envp;
  13. {
  14. register int i, envpsize = 0;
  15. extern char **environ;
  16. /*
  17. **  Move the environment so setproctitle can use the space at
  18. **  the top of memory.
  19. */
  20. for (i = 0; envp[i] != NULL; i++)
  21. envpsize += strlen(envp[i]) + 1;
  22. {
  23. char *s;
  24. environ = (char **) emalloc((sizeof (char *) * (i + 1))+envpsize+1);
  25. s = ((char *)environ)+((sizeof (char *) * (i + 1)));
  26. for (i = 0; envp[i] != NULL; i++){
  27. strcpy(s,envp[i]);
  28. environ[i] = s;
  29. s += strlen(s)+1;
  30. }
  31. }
  32. environ[i] = NULL;
  33. MyName = estrdup(argv[0]);
  34. /*
  35. **  Save start and extent of argv for setproctitle.
  36. */
  37. Argv = argv;
  38. /*
  39. **  Determine how much space we can use for setproctitle.  
  40. **  Use all contiguous argv and envp pointers starting at argv[0]
  41.   */
  42. for (i = 0; i < argc; i++)
  43. {
  44. if (i==0 || LastArgv + 1 == argv[i])
  45. LastArgv = argv[i] + strlen(argv[i]);
  46. else
  47. continue;
  48. }
  49. for (i=0; envp[i] != NULL; i++)
  50. {
  51. if (LastArgv + 1 == envp[i])
  52. LastArgv = envp[i] + strlen(envp[i]);
  53. else
  54. continue;
  55. }
  56. }
  57. #define SPT_BUFSIZE 1024
  58. #define SPT_PADCHAR ''
  59.  void
  60.  setproctitle (const char *fmt,...)
  61. {
  62. register int i;
  63. static char buf[SPT_BUFSIZE]; 
  64.         static char buf2[SPT_BUFSIZE+20];
  65. va_list param;
  66.  
  67.     /* print the argument string */
  68.     va_start(param, fmt);
  69. #if HAVE_VNSPRINTF
  70.     (void) vsnprintf(buf, sizeof(buf), fmt, param);
  71. #else
  72.     vsprintf(buf, fmt, param);
  73. #endif
  74.     va_end(param);
  75.     snprintf(buf2, sizeof(buf2), "nessusd: %s", buf);
  76.     bzero(buf, sizeof(buf));
  77.     strncpy(buf, buf2, sizeof(buf) - 1);
  78.    
  79.     i = strlen(buf);
  80. if (i > LastArgv - Argv[0] - 2)
  81. {
  82. i = LastArgv - Argv[0] - 2;
  83. buf[i] = '';
  84. }
  85. (void) strcpy(Argv[0], buf);
  86. { char *p;
  87. p = &Argv[0][i];
  88. while (p < LastArgv)
  89. *p++ = SPT_PADCHAR;
  90. }
  91. Argv[1] = NULL;
  92. }
  93. #else  /* Not linux */
  94. void initsetproctitle(argc, argv, envp)
  95. int argc;
  96. char **argv;
  97. char **envp;
  98. {
  99.  return;
  100. }
  101. void
  102.  setproctitle (const char *fmt,...)
  103. {
  104.  return;
  105. }
  106. #endif
  107. #else /* the system has a setproctitle() call */
  108. void initsetproctitle(argc, argv, envp)
  109. int argc;
  110. char **argv;
  111. char **envp;
  112. {
  113.  return;
  114. }
  115. #endif