userio.c
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:4k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1997, 1998, 1999
  3.  *      Inferno Nettverk A/S, Norway.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. The above copyright notice, this list of conditions and the following
  9.  *    disclaimer must appear in all copies of the software, derivative works
  10.  *    or modified versions, and any portions thereof, aswell as in all
  11.  *    supporting documentation.
  12.  * 2. All advertising materials mentioning features or use of this software
  13.  *    must display the following acknowledgement:
  14.  *      This product includes software developed by
  15.  *      Inferno Nettverk A/S, Norway.
  16.  * 3. The name of the author may not be used to endorse or promote products
  17.  *    derived from this software without specific prior written permission.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  20.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  21.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  22.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  23.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  24.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  28.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  *
  30.  * Inferno Nettverk A/S requests users of this software to return to
  31.  *
  32.  *  Software Distribution Coordinator  or  sdc@inet.no
  33.  *  Inferno Nettverk A/S
  34.  *  Oslo Research Park
  35.  *  Gaustadal閑n 21
  36.  *  N-0349 Oslo
  37.  *  Norway
  38.  *
  39.  * any improvements or extensions that they make and grant Inferno Nettverk A/S
  40.  * the rights to redistribute these changes.
  41.  *
  42.  */
  43. #include "common.h"
  44. static const char rcsid[] =
  45. "$Id: userio.c,v 1.17 1999/05/25 17:22:39 michaels Exp $";
  46. /* ARGSUSED */
  47. char *
  48. socks_getusername(host, buf, buflen)
  49. const struct sockshost_t *host;
  50. char *buf;
  51. size_t buflen;
  52. {
  53. const char *function = "socks_getusername()";
  54. char *name;
  55. if ((name = getenv("SOCKS_USERNAME")) != NULL
  56. ||  (name = getenv("SOCKS_USER")) != NULL
  57. ||  (name = getenv("SOCKS5_USER")) != NULL)
  58. ;
  59. else {
  60. struct passwd *pw;
  61. if ((pw = getpwuid(getuid())) != NULL)
  62. name = pw->pw_name;
  63. }
  64. if (name == NULL)
  65. return NULL;
  66. if (strlen(name) >= buflen) {
  67. swarnx("%s: socks username %d characters too long, truncated",
  68. function, (strlen(name) + 1) - buflen);
  69. name[buflen - 1] = NUL;
  70. }
  71. strcpy(buf, name);
  72. return buf;
  73. }
  74. char *
  75. socks_getpassword(host, user, buf, buflen)
  76. const struct sockshost_t *host;
  77. const char *user;
  78. char *buf;
  79. size_t buflen;
  80. {
  81. const char *function = "socks_getpassword()";
  82. char *password;
  83. if ((password = getenv("SOCKS_PASSWORD")) != NULL
  84. ||  (password = getenv("SOCKS_PASSWD")) != NULL
  85. ||  (password = getenv("SOCKS5_PASSWD")) != NULL)
  86. ;
  87. else {
  88. char prompt[256 + MAXSOCKSHOSTSTRING];
  89. char hstring[MAXSOCKSHOSTSTRING];
  90. snprintf(prompt, sizeof(prompt), "%s@%s sockspassword: ",
  91. user, sockshost2string(host, hstring, sizeof(hstring)));
  92. password = getpass(prompt);
  93. }
  94. if (password == NULL)
  95. return NULL;
  96. if (strlen(password) >= buflen) {
  97. swarnx("%s: socks password %d characters too long, truncated",
  98. function, (strlen(password) + 1) - buflen);
  99. password[buflen - 1] = NUL;
  100. }
  101. strcpy(buf, password);
  102. bzero(password, strlen(password));
  103. return buf;
  104. }