z3APA3A před 5 roky
rodič
revize
a0da9c97e8
10 změnil soubory, kde provedl 78 přidání a 78 odebrání
  1. 8 8
      src/auth.c
  2. 9 9
      src/authradius.c
  3. 3 3
      src/base64.c
  4. 1 1
      src/conf.c
  5. 1 1
      src/datatypes.c
  6. 4 4
      src/dnspr.c
  7. 8 8
      src/log.c
  8. 32 32
      src/mycrypt.c
  9. 3 3
      src/proxy.c
  10. 9 9
      src/socks.c

+ 8 - 8
src/auth.c

@@ -10,7 +10,7 @@
 
 
 int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr, char * hostname){
-	unsigned char *buf;
+	char *buf;
 	char *username;
 	int res;
 	int len=0;
@@ -393,8 +393,8 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){
 					break;
 
 					case 2:
-					lname = strlen((char *)hstentry->name);
-					lhost = strlen((char *)param->hostname);
+					lname = (int)strlen((char *)hstentry->name);
+					lhost = (int)strlen((char *)param->hostname);
 					if(lhost > lname){
 						if(!strncasecmp((char *)param->hostname + (lhost - lname),
 							(char *)hstentry->name,
@@ -1170,7 +1170,7 @@ unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, st
 	for(i=0; i<n; i++){
 		unsigned short nq, na;
 		char b[4098], *s1, *s2;
-		unsigned char *buf;
+		char *buf;
 		int j, k, len, flen;
 		SOCKET sock;
 		unsigned ttl;
@@ -1184,7 +1184,7 @@ unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, st
 		int usetcp = 0;
 		unsigned short serial = 1;
 
-		buf = (unsigned char*)b+2;
+		buf = b+2;
 
 		sinsl = (param && !makeauth)? &param->sinsl : &addr;
 		sinsr = (param && !makeauth)? &param->sinsr : &addr;
@@ -1221,11 +1221,11 @@ unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, st
 #ifdef TCP_NODELAY
 			{
 				int opt = 1;
-				setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&opt, sizeof(opt));
+				setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&opt, sizeof(opt));
 			}
 #endif
 		}
-		len = (int)strlen((char *)name);
+		len = (int)strlen(name);
 		
 		serial = myrand(name,len);
 		*(unsigned short*)buf = serial; /* query id */
@@ -1242,7 +1242,7 @@ unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, st
 		memcpy(buf + 13, name, len);
 		len += 13;
 		buf[len] = 0;
-		for(s2 = buf + 12; (s1 = (char *)strchr((char *)s2 + 1, '.')); s2 = s1)*s2 = (char)((s1 - s2) - 1);
+		for(s2 = buf + 12; (s1 = strchr(s2 + 1, '.')); s2 = s1)*s2 = (char)(unsigned char)((s1 - s2) - 1);
 		*s2 = (len - (int)(s2 - buf)) - 1;
 		len++;
 		buf[len++] = 0;

+ 9 - 9
src/authradius.c

@@ -194,7 +194,7 @@ static int calc_replydigest(char *packet, char *original, const char *secret, in
 
 	memcpy(calc_vector, packet + 4, AUTH_VECTOR_LEN);
 	memcpy(packet + 4, original, AUTH_VECTOR_LEN);
-	secretlen = strlen(secret);
+	secretlen = (int)strlen(secret);
 	memcpy(packet + len, secret, secretlen);
 	md5_calc(calc_digest, (u_char *)packet, len + secretlen);
 
@@ -212,7 +212,7 @@ static int rad_pwencode(char *passwd, int *pwlen, const char *secret, const char
 	int	i, n, secretlen;
 	int	len;
 
-	len = strlen(passwd);
+	len = (int)strlen(passwd);
 	if (len > 128) len = 128;
 	*pwlen = len;
 	if (len % AUTH_PASS_LEN != 0) {
@@ -222,7 +222,7 @@ static int rad_pwencode(char *passwd, int *pwlen, const char *secret, const char
 		len = *pwlen = i;
 	}
 
-	secretlen = strlen(secret);
+	secretlen = (int)strlen(secret);
 	memcpy(buffer, secret, secretlen);
 	memcpy(buffer + secretlen, vector, AUTH_VECTOR_LEN);
 	md5_calc((u_char *)digest, buffer, secretlen + AUTH_VECTOR_LEN);
@@ -325,7 +325,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 
 	/* Acct-Session-Id */
 	sprintf(buf, "%u.%u.%u", (unsigned)param->time_start, (unsigned)param->msec_start, (unsigned)param->threadid);
-        len = strlen(buf);
+        len = (int)strlen(buf);
 	*ptr++ =  PW_ACCT_SESSION_ID;
 	*ptr++ = 2+len;
 	memcpy(ptr, buf, len);
@@ -365,7 +365,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 	/* NAS-Identifier */
 	if(conf.stringtable){
 		*ptr++ = PW_NAS_IDENTIFIER;
-		len = strlen(conf.stringtable[SERVICES+param->service]);
+		len = (int)strlen(conf.stringtable[SERVICES+param->service]);
 		*ptr++ = (2 + len);
 		memcpy(ptr, conf.stringtable[SERVICES+param->service], len);
 		ptr += len;
@@ -390,7 +390,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 	/* Called-Station-ID */
 	if(param->hostname){
 		*ptr++ = PW_CALLED_STATION_ID;
-		len = strlen(param->hostname);
+		len = (int)strlen(param->hostname);
 		*ptr++ = (2 + len);
 		memcpy(ptr, param->hostname, len);
 		ptr += len;
@@ -432,7 +432,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 
 	/* Username */
 	if(param->username){
-	    len = strlen(param->username);
+	    len = (int)strlen(param->username);
 	    if(len>128)len=128;
 	    *ptr++ = PW_USER_NAME;
 	    *ptr++ = len + 2;
@@ -475,7 +475,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 	}
 	
 	if(auth && param->password){
-    	    len = strlen(param->password);
+    	    len = (int)strlen(param->password);
 	    if(len > 128) len = 128;
 	    *ptr++ = PW_PASSWORD;
 	    ptr++;
@@ -493,7 +493,7 @@ static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, i
 	packet.length = htons(total_length);
 	
 	if(!auth){
-		len = strlen(radiussecret);
+		len = (int)strlen(radiussecret);
 		memcpy(ptr,radiussecret,len);
 		md5_calc(packet.vector, (u_char *)&packet, total_length + len);
 	}

+ 3 - 3
src/base64.c

@@ -10,7 +10,7 @@
 static const char base64digits[] =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
-#define BAD 255
+#define BAD -1
 static const char base64val[] = {
     BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
     BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
@@ -23,7 +23,7 @@ static const char base64val[] = {
 };
 #define DECODE64(c)  ((c > 32 && c<127)? base64val[(int)c] : BAD)
 
-unsigned char* en64 (const char *in, char *out, int inlen)
+char* en64 (const char *in, char *out, int inlen)
 {
     for (; inlen > 0; inlen -= 3, in+=3)
     {
@@ -40,7 +40,7 @@ unsigned char* en64 (const char *in, char *out, int inlen)
 int de64 (const char *in, char *out, int maxlen)
 {
     int len = 0;
-    register unsigned char digit1, digit2, digit3, digit4;
+    register char digit1, digit2, digit3, digit4;
 
     if (in[0] == '+' && in[1] == ' ')
 	in += 2;

+ 1 - 1
src/conf.c

@@ -701,7 +701,7 @@ int scanipl(char *arg, struct iplist *dst){
 
 			for(i = addrlen; i>(nbytes + (nbits > 0)); i--){
 				((char *)&dst->ip_from)[i-1] = 0x00;
-				((char *)&dst->ip_to)[i-1] = 0xff;
+				((char *)&dst->ip_to)[i-1] = (char)(unsigned char)0xff;
 			}
 			for(;nbits;nbits--){
 				((char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1));

+ 1 - 1
src/datatypes.c

@@ -77,7 +77,7 @@ static void pr_sa(struct node *node, CBFUNC cbf, void*cb){
 	buf[1] = 0;
 	inet_ntop(*SAFAMILY(node->value), SAADDR(node->value), buf+1, sizeof(buf)-10);
 	sprintf(buf + strlen(buf), "]:%hu", (unsigned short)*SAPORT(node->value));
-	if(node->value)(*cbf)(cb, buf, strlen(buf));
+	if(node->value)(*cbf)(cb, buf, (int)strlen(buf));
 #endif
 }
 

+ 4 - 4
src/dnspr.c

@@ -27,7 +27,7 @@ void * dnsprchild(struct clientparam* param) {
  int len;
  unsigned type=0;
  unsigned ttl;
- unsigned char addr[16];
+ char addr[16];
 #ifdef _WIN32
 	unsigned long ul = 1;
 #endif
@@ -83,7 +83,7 @@ void * dnsprchild(struct clientparam* param) {
 
  type = ((unsigned)buf[len+1])*256 + (unsigned)buf[len+2];
  if((type==0x01 || type==0x1c) && !param->srv->singlepacket){
- 	ip = udpresolve((type==0x1c)?AF_INET6:AF_INET, (unsigned char *)host, addr, &ttl, param, 0);
+ 	ip = udpresolve((type==0x1c)?AF_INET6:AF_INET, host, addr, &ttl, param, 0);
  }
 
  len+=5;
@@ -170,7 +170,7 @@ void * dnsprchild(struct clientparam* param) {
 		if(us > 4096) RETURN(833);
 		buf += 2;
 		len -= 2;
-		if(len < us) len += sockgetlinebuf(param, SERVER, buf+len, us - len, 0, conf.timeouts[SINGLEBYTE_L]);
+		if(len < us) len += sockgetlinebuf(param, SERVER, (char *)buf+len, us - len, 0, conf.timeouts[SINGLEBYTE_L]);
 		if(len != us) RETURN(832);
 	}
 	if(buf[6] || buf[7]){
@@ -198,7 +198,7 @@ CLEANRET:
 	if((ip && type == 0x01) || type == 0x1c){
 		myinet_ntop(type == 0x01? AF_INET:AF_INET6, addr, (char *)buf+strlen((char *)buf), 64);
 	}
-	dolog(param, buf);
+	dolog(param, (char *)buf);
  }
  if(bbuf)myfree(bbuf);
  if(host)myfree(host);

+ 8 - 8
src/log.c

@@ -350,7 +350,7 @@ void dolog(struct clientparam * param, const char *s){
 	static int init = 0;
 
 	if(!param || !param->srv){
-		stdlog(s, strlen(s), &errlogger);
+		stdlog(s, (int)strlen(s), &errlogger);
 		return;
 	}
 	if(conf.prelog)conf.prelog(param);
@@ -360,9 +360,9 @@ void dolog(struct clientparam * param, const char *s){
 		if(!param->srv->log->logfunc) {
 			int slen =0, hlen=0, ulen=0;
 			
-			slen = s?strlen(s)+1 : 0;
-			hlen = param->hostname? strlen(param->hostname)+1 : 0;
-			ulen = param->username? strlen(param->username)+1 : 0;
+			slen = s?(int)strlen(s)+1 : 0;
+			hlen = param->hostname? (int)strlen(param->hostname)+1 : 0;
+			ulen = param->username? (int)strlen(param->username)+1 : 0;
 			if(!(evt = malloc(sizeof(struct logevent) + slen + ulen + hlen))) return;
 			evt->inbuf = 0;
 			evt->param=param;
@@ -502,7 +502,7 @@ char * dologname (char *buf,  int bufsize, char *name, const char *ext, ROTATION
 
 	ts = localtime(&t);
 	if(strchr((char *)name, '%')){
-		dobuf2(&logparam, buf, bufsize - (ext?strlen(ext):0), NULL, NULL, ts, (char *)name);
+		dobuf2(&logparam, buf, bufsize - (ext?(int)strlen(ext):0), NULL, NULL, ts, (char *)name);
 	}
 	else switch(lt){
 		case NONE:
@@ -875,12 +875,12 @@ static void stdlogrotate(struct LOGGER *logger){
 			strcat((char *)tmpbuf, " ");
 			if(!strcmp((char *)conf.archiver[i], "%A")){
 				strcat((char *)tmpbuf, "\"");
-				dologname (tmpbuf + strlen((char *)tmpbuf), sizeof(tmpbuf) - (strlen((char *)tmpbuf) + 1), logger->selector, conf.archiver[1], logger->rotate, (logger->rotated - t));
+				dologname (tmpbuf + strlen((char *)tmpbuf), (int)(sizeof(tmpbuf) - (strlen((char *)tmpbuf) + 1)), logger->selector, conf.archiver[1], logger->rotate, (logger->rotated - t));
 				strcat((char *)tmpbuf, "\"");
 			}
 			else if(!strcmp((char *)conf.archiver[i], "%F")){
 				strcat((char *)tmpbuf, "\"");
-				dologname (tmpbuf+strlen((char *)tmpbuf), sizeof(tmpbuf) - (strlen((char *)tmpbuf) + 1), logger->selector, NULL, logger->rotate, (logger->rotated-t));
+				dologname (tmpbuf+strlen((char *)tmpbuf), (int)(sizeof(tmpbuf) - (strlen((char *)tmpbuf) + 1)), logger->selector, NULL, logger->rotate, (logger->rotated-t));
 				strcat((char *)tmpbuf, "\"");
 			}
 			else
@@ -1081,4 +1081,4 @@ static void sqlclose(struct LOGGER *logger){
 }
 
 
-#endif
+#endif

+ 32 - 32
src/mycrypt.c

@@ -42,7 +42,7 @@ char * ntpwdhash (char *szHash, const char *szPassword, int ctohex)
 	 *	NT passwords are unicode.  Convert plain text password
 	 *	to unicode by inserting a zero every other byte
 	 */
-	nPasswordLen = (int)strlen((char *)szPassword);
+	nPasswordLen = (int)strlen(szPassword);
 	if(nPasswordLen > 255)nPasswordLen = 255;
 	for (i = 0; i < nPasswordLen; i++) {
 		szUnicodePass[i << 1] = szPassword[i];
@@ -51,8 +51,8 @@ char * ntpwdhash (char *szHash, const char *szPassword, int ctohex)
 
 	/* Encrypt Unicode password to a 16-byte MD4 hash */
 	MD4Init(&ctx);
-	MD4Update(&ctx, szUnicodePass, (nPasswordLen<<1));
-	MD4Final(szUnicodePass, &ctx);
+	MD4Update(&ctx, (unsigned char*)szUnicodePass, (nPasswordLen<<1));
+	MD4Final((unsigned char*)szUnicodePass, &ctx);
 	if (ctohex){
 		tohex(szUnicodePass, szHash, 16);
 	}
@@ -64,8 +64,8 @@ char * ntpwdhash (char *szHash, const char *szPassword, int ctohex)
 char * mycrypt(const char *pw, const char *salt, char *passwd){
 
  const char *ep;
- if(salt[0] == '$' && salt[1] == '1' && salt[2] == '$' && (ep = (char *)strchr((char *)salt+3, '$'))) {
-	static char	*magic = (char *)"$1$";	
+ if(salt[0] == '$' && salt[1] == '1' && salt[2] == '$' && (ep = strchr(salt+3, '$'))) {
+	static char	*magic = "$1$";	
 	char  *p;
 	const char *sp;
 	char	final[MD5_SIZE];
@@ -82,39 +82,39 @@ char * mycrypt(const char *pw, const char *salt, char *passwd){
 	MD5Init(&ctx);
 
 	/* The password first, since that is what is most unknown */
-	MD5Update(&ctx,pw,strlen((char *)pw));
+	MD5Update(&ctx,(unsigned char*)pw,strlen(pw));
 
 	/* Then our magic string */
-	MD5Update(&ctx,magic,strlen((char *)magic));
+	MD5Update(&ctx,(unsigned char*)magic,strlen(magic));
 
 	/* Then the raw salt */
-	MD5Update(&ctx,sp,sl);
+	MD5Update(&ctx,(unsigned char*)sp,sl);
 
 	/* Then just as many characters of the MD5(pw,salt,pw) */
 	MD5Init(&ctx1);
-	MD5Update(&ctx1,pw,strlen((char *)pw));
-	MD5Update(&ctx1,sp,sl);
-	MD5Update(&ctx1,pw,strlen((char *)pw));
-	MD5Final(final,&ctx1);
-	for(pl = (int)strlen((char *)pw); pl > 0; pl -= MD5_SIZE)
-		MD5Update(&ctx,final,pl>MD5_SIZE ? MD5_SIZE : pl);
+	MD5Update(&ctx1,(unsigned char*)pw,strlen(pw));
+	MD5Update(&ctx1,(unsigned char*)sp,sl);
+	MD5Update(&ctx1,(unsigned char*)pw,strlen(pw));
+	MD5Final((unsigned char*)final,&ctx1);
+	for(pl = (int)strlen(pw); pl > 0; pl -= MD5_SIZE)
+		MD5Update(&ctx,(unsigned char*)final,pl>MD5_SIZE ? MD5_SIZE : pl);
 
 	/* Don't leave anything around in vm they could use. */
 	memset(final,0,sizeof final);
 
 	/* Then something really weird... */
-	for (i = (int)strlen((char *)pw); i ; i >>= 1)
+	for (i = (int)strlen(pw); i ; i >>= 1)
 		if(i&1)
-		    MD5Update(&ctx, final, 1);
+		    MD5Update(&ctx, (unsigned char*)final, 1);
 		else
-		    MD5Update(&ctx, pw, 1);
+		    MD5Update(&ctx, (unsigned char*)pw, 1);
 
 	/* Now make the output string */
-	strcpy((char *)passwd,(char *)magic);
-	strncat((char *)passwd,(char *)sp,sl);
-	strcat((char *)passwd,"$");
+	strcpy(passwd,magic);
+	strncat(passwd,sp,sl);
+	strcat(passwd,"$");
 
-	MD5Final(final,&ctx);
+	MD5Final((unsigned char*)final,&ctx);
 
 	/*
 	 * and now, just to make sure things don't run too fast
@@ -124,24 +124,24 @@ char * mycrypt(const char *pw, const char *salt, char *passwd){
 	for(i=0;i<1000;i++) {
 		MD5Init(&ctx1);
 		if(i & 1)
-			MD5Update(&ctx1,pw,strlen((char *)pw));
+			MD5Update(&ctx1,(unsigned char*)pw,strlen(pw));
 		else
-			MD5Update(&ctx1,final,MD5_SIZE);
+			MD5Update(&ctx1,(unsigned char*)final,MD5_SIZE);
 
 		if(i % 3)
-			MD5Update(&ctx1,sp,sl);
+			MD5Update(&ctx1,(unsigned char*)sp,sl);
 
 		if(i % 7)
-			MD5Update(&ctx1,pw,strlen((char *)pw));
+			MD5Update(&ctx1,(unsigned char*)pw,strlen(pw));
 
 		if(i & 1)
-			MD5Update(&ctx1,final,MD5_SIZE);
+			MD5Update(&ctx1,(unsigned char*)final,MD5_SIZE);
 		else
-			MD5Update(&ctx1,pw,strlen((char *)pw));
-		MD5Final(final,&ctx1);
+			MD5Update(&ctx1,(unsigned char*)pw,strlen(pw));
+		MD5Final((unsigned char*)final,&ctx1);
 	}
 
-	p = passwd + strlen((char *)passwd);
+	p = passwd + strlen(passwd);
 
 	l = (final[ 0]<<16) | (final[ 6]<<8) | final[12];
 	_crypt_to64(p,l,4); p += 4;
@@ -185,12 +185,12 @@ int main(int argc, char* argv[]){
 			return 1;
 	}
 	if(argc == 2) {
-		printf("NT:%s\n", ntpwdhash(buf, (char *)argv[1], 1));
+		printf("NT:%s\n", ntpwdhash(buf, argv[1], 1));
 	}
 	else {
-		i = (int)strlen((char *)argv[1]);
+		i = (int)strlen(argv[1]);
 		if (i > 64) argv[1][64] = 0;
-		sprintf((char *)buf, "$1$%s$", argv[1]);
+		sprintf(buf, "$1$%s$", argv[1]);
 		printf("CR:%s\n", mycrypt(argv[2], buf, buf+256));
 	}
 	return 0;

+ 3 - 3
src/proxy.c

@@ -159,7 +159,7 @@ void decodeurl(char *s, int allowcr){
 		if(allowcr && u != '\r')*d++ = u;
 		else if (u != '\r' && u != '\n') {
 			if (u == '\"' || u == '\\') *d++ = '\\';
-			else if (u == 255) *d++ = 255;
+			else if (u == 255) *d++ = (char)(unsigned char)255;
 			*d++ = u;
 		}
 		s+=3;
@@ -187,7 +187,7 @@ void file2url(char *sb, char *buf, unsigned bufsize, int * inbuf, int skip255){
 		memcpy(buf+*inbuf, "%5C%22", 6);
 		(*inbuf)+=6;
 	}
-	else if(skip255 && *sb == 255 && *(sb+1) == 255) {
+	else if(skip255 && *sb == (char)(unsigned char)255 && *(sb+1) == (char)(unsigned char)255) {
 		memcpy(buf+*inbuf, "%ff", 3);
 		(*inbuf)+=3;
 		sb++;
@@ -780,7 +780,7 @@ for(;;){
  inbuf = 0;
 #ifndef ANONYMOUS
  if(!anonymous){
-		int len = strlen((char *)buf);
+		int len = (int)strlen((char *)buf);
 		len += sprintf((char*)buf + len, "Forwarded: for=");
 		if(*SAFAMILY(&param->sincr) == AF_INET6) len += sprintf((char*)buf + len, "\"[");
 		len += myinet_ntop(*SAFAMILY(&param->sincr), SAADDR(&param->sincr), (char *)buf + len, 128);

+ 9 - 9
src/socks.c

@@ -10,7 +10,7 @@
 
 #define RETURN(xxx) { param->res = xxx; goto CLEANRET; }
 
-unsigned char * commands[] = {(unsigned char *)"UNKNOWN", (unsigned char *)"CONNECT", (unsigned char *)"BIND", (unsigned char *)"UDPMAP"};
+char * commands[] = {"UNKNOWN", "CONNECT", "BIND", "UDPMAP"};
 
 #define BUFSIZE 1024
 #define LARGEBUFSIZE 67000
@@ -63,11 +63,11 @@ void * sockschild(struct clientparam* param) {
 		if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);}
 		if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(441);};
 		buf[i] = 0;
-		if(!param->username)param->username = (unsigned char *)mystrdup((char *)buf);
+		if(!param->username)param->username = mystrdup(buf);
 		if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(445);}
 		if (i && (unsigned)(res = sockgetlinebuf(param, CLIENT, buf, i, 0, conf.timeouts[STRING_S])) != i){RETURN(441);};
 		buf[i] = 0;
-		if(!param->password)param->password = (unsigned char *)mystrdup((char *)buf);
+		if(!param->password)param->password = mystrdup(buf);
 		buf[0] = 1;
 		buf[1] = 0;
 		if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(481);}
@@ -123,7 +123,7 @@ void * sockschild(struct clientparam* param) {
 		if(command == 1 && SAISNULL(&param->req)) {
 			RETURN(431);
 		}
-		myinet_ntop(*SAFAMILY(&param->sinsr), SAADDR(&param->sinsr), (char *)buf, 64);
+		myinet_ntop(*SAFAMILY(&param->sinsr), SAADDR(&param->sinsr), buf, 64);
 		break;
 	case 3:
 		if ((size = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(451);} /* nmethods */
@@ -139,7 +139,7 @@ void * sockschild(struct clientparam* param) {
 		RETURN(997);
  }
  if(param->hostname)myfree(param->hostname);
- param->hostname = (unsigned char *)mystrdup((char *)buf);
+ param->hostname = mystrdup(buf);
  if (ver == 5) {
 	 if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
 	 buf[0] = (unsigned char) res;
@@ -151,13 +151,13 @@ void * sockschild(struct clientparam* param) {
  else {
 	sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
 	buf[127] = 0;
-	if(param->srv->needuser && *buf && !param->username)param->username = (unsigned char *)mystrdup((char *)buf);
+	if(param->srv->needuser && *buf && !param->username)param->username = mystrdup(buf);
 	if(!memcmp(SAADDR(&param->req), "\0\0\0", 3)){
 		param->service = S_SOCKS45;
 		sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
 		buf[127] = 0;
 		if(param->hostname)myfree(param->hostname);
-		param->hostname = (unsigned char *)mystrdup((char *)buf);
+		param->hostname = mystrdup(buf);
 		if(!getip46(param->srv->family, buf, (struct sockaddr *) &param->req)) RETURN(100);
 		param->sinsr = param->req;
 	}
@@ -185,11 +185,11 @@ void * sockschild(struct clientparam* param) {
 
 #ifdef SO_REUSEADDR
 		opt = 1;
-		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int));
+		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
 #endif
 #ifdef SO_REUSEPORT
 		opt = 1;
-		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int));
+		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(int));
 #endif
 	}
 #endif