From b6ec2208640456a9422a74b4f39a50ddb65e4970 Mon Sep 17 00:00:00 2001
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Sat, 25 Jan 2020 10:42:20 +0100
Subject: [PATCH] Drop u_char and u_short

Replace u_char and u_short by unsigned char and unsigned short to fix
build on musl

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
[Retrieved from:
https://github.com/kravietz/pam_tacplus/commit/b6ec2208640456a9422a74b4f39a50ddb65e4970]
---
 libtac/include/libtac.h  |  8 ++--
 libtac/include/tacplus.h | 88 ++++++++++++++++++++--------------------
 libtac/lib/acct_r.c      |  4 +-
 libtac/lib/acct_s.c      | 20 ++++-----
 libtac/lib/attrib.c      |  6 +--
 libtac/lib/authen_r.c    |  2 +-
 libtac/lib/authen_s.c    | 14 +++----
 libtac/lib/author_r.c    | 22 +++++-----
 libtac/lib/author_s.c    | 18 ++++----
 libtac/lib/cont_s.c      |  4 +-
 libtac/lib/crypt.c       | 10 ++---
 libtac/lib/header.c      |  2 +-
 12 files changed, 99 insertions(+), 99 deletions(-)

diff --git a/libtac/include/libtac.h b/libtac/include/libtac.h
index 4922bf7..d8c7289 100644
--- a/libtac/include/libtac.h
+++ b/libtac/include/libtac.h
@@ -96,7 +96,7 @@ typedef unsigned int u_int32_t;
 
 struct tac_attrib {
 	char *attr;
-	u_char attr_len;
+	unsigned char attr_len;
 	struct tac_attrib *next;
 };
 
@@ -169,12 +169,12 @@ int tac_connect_single(const struct addrinfo *, const char *, struct addrinfo *,
 char *tac_ntop(const struct sockaddr *);
 
 int tac_authen_send(int, const char *, const char *, const char *, const char *,
-		u_char);
+		unsigned char);
 int tac_authen_read(int, struct areply *);
 int tac_cont_send_seq(int, const char *, int);
 #define tac_cont_send(fd, pass) tac_cont_send_seq((fd), (pass), 3)
-HDR *_tac_req_header(u_char, int);
-void _tac_crypt(u_char *, const HDR *);
+HDR *_tac_req_header(unsigned char, int);
+void _tac_crypt(unsigned char *, const HDR *);
 void tac_add_attrib(struct tac_attrib **, char *, char *);
 void tac_free_attrib(struct tac_attrib **);
 char *tac_acct_flag2str(int);
diff --git a/libtac/include/tacplus.h b/libtac/include/tacplus.h
index 90d7c8b..2ac8848 100644
--- a/libtac/include/tacplus.h
+++ b/libtac/include/tacplus.h
@@ -24,7 +24,7 @@
 
 /* All tacacs+ packets have the same header format */
 struct tac_plus_pak_hdr {
-    u_char version;
+    unsigned char version;
 
 #define TAC_PLUS_MAJOR_VER_MASK 0xf0
 #define TAC_PLUS_MAJOR_VER      0xc0
@@ -35,14 +35,14 @@ struct tac_plus_pak_hdr {
 #define TAC_PLUS_MINOR_VER_1 0x01
 #define TAC_PLUS_VER_1  (TAC_PLUS_MAJOR_VER | TAC_PLUS_MINOR_VER_1)
 
-    u_char type;
+    unsigned char type;
 
 #define TAC_PLUS_AUTHEN 0x01
 #define TAC_PLUS_AUTHOR	0x02
 #define TAC_PLUS_ACCT   0x03
 
-    u_char seq_no;        /* packet sequence number */
-    u_char encryption;    /* packet is encrypted or cleartext */
+    unsigned char seq_no;        /* packet sequence number */
+    unsigned char encryption;    /* packet is encrypted or cleartext */
 
 #define TAC_PLUS_ENCRYPTED_FLAG      0x00    /* packet is encrypted */
 #define TAC_PLUS_UNENCRYPTED_FLAG    0x01    /* packet is unencrypted */
@@ -59,21 +59,21 @@ typedef struct tac_plus_pak_hdr HDR;
 
 /* Authentication packet NAS sends to us */ 
 struct authen_start {
-    u_char action;
+    unsigned char action;
 
 #define TAC_PLUS_AUTHEN_LOGIN    0x01
 #define TAC_PLUS_AUTHEN_CHPASS   0x02
 #define TAC_PLUS_AUTHEN_SENDPASS 0x03 /* deprecated */
 #define TAC_PLUS_AUTHEN_SENDAUTH 0x04
 
-    u_char priv_lvl;
+    unsigned char priv_lvl;
 
 #define TAC_PLUS_PRIV_LVL_MIN  0x00
 #define TAC_PLUS_PRIV_LVL_MAX  0x0f
 #define TAC_PLUS_PRIV_LVL_USER 0x01
 #define TAC_PLUS_PRIV_LVL_ROOT 0x0f
 
-    u_char authen_type;
+    unsigned char authen_type;
 
 #define TAC_PLUS_AUTHEN_TYPE_ASCII  0x01
 #define TAC_PLUS_AUTHEN_TYPE_PAP    0x02
@@ -81,7 +81,7 @@ struct authen_start {
 #define TAC_PLUS_AUTHEN_TYPE_ARAP   0x04
 #define TAC_PLUS_AUTHEN_TYPE_MSCHAP 0x05
 
-    u_char service;
+    unsigned char service;
 
 #define TAC_PLUS_AUTHEN_SVC_NONE    0x00
 #define TAC_PLUS_AUTHEN_SVC_LOGIN   0x01
@@ -94,19 +94,19 @@ struct authen_start {
 #define TAC_PLUS_AUTHEN_SVC_NASI    0x08
 #define TAC_PLUS_AUTHEN_SVC_FWPROXY 0x09
 
-    u_char user_len;
-    u_char port_len;
-    u_char r_addr_len;
-    u_char data_len;
+    unsigned char user_len;
+    unsigned char port_len;
+    unsigned char r_addr_len;
+    unsigned char data_len;
 };
 
 #define TAC_AUTHEN_START_FIXED_FIELDS_SIZE 8
 
 /* Authentication continue packet NAS sends to us */ 
 struct authen_cont {
-    u_short user_msg_len;
-    u_short user_data_len;
-    u_char flags;
+    unsigned short user_msg_len;
+    unsigned short user_data_len;
+    unsigned char flags;
 
 #define TAC_PLUS_CONTINUE_FLAG_ABORT 0x01
 
@@ -116,7 +116,7 @@ struct authen_cont {
 
 /* Authentication reply packet we send to NAS */ 
 struct authen_reply {
-    u_char status;
+    unsigned char status;
 
 #define TAC_PLUS_AUTHEN_STATUS_PASS    0x01
 #define TAC_PLUS_AUTHEN_STATUS_FAIL    0x02
@@ -127,12 +127,12 @@ struct authen_reply {
 #define TAC_PLUS_AUTHEN_STATUS_ERROR   0x07 
 #define TAC_PLUS_AUTHEN_STATUS_FOLLOW  0x21
 
-    u_char flags;
+    unsigned char flags;
 
 #define TAC_PLUS_AUTHEN_FLAG_NOECHO 0x01
 
-    u_short msg_len;
-    u_short data_len;
+    unsigned short msg_len;
+    unsigned short data_len;
 };
 
 #define TAC_AUTHEN_REPLY_FIXED_FIELDS_SIZE 6
@@ -158,29 +158,29 @@ struct authen_reply {
 #define AUTHEN_METH_RCMD       TAC_PLUS_AUTHEN_METH_RCMD
 
 struct acct {
-    u_char flags;
+    unsigned char flags;
 
 #define TAC_PLUS_ACCT_FLAG_MORE     0x01
 #define TAC_PLUS_ACCT_FLAG_START    0x02
 #define TAC_PLUS_ACCT_FLAG_STOP     0x04
 #define TAC_PLUS_ACCT_FLAG_WATCHDOG 0x08
 	    
-    u_char authen_method;
-    u_char priv_lvl;
-    u_char authen_type;
-    u_char authen_service;
-    u_char user_len;
-    u_char port_len;
-    u_char r_addr_len;
-    u_char arg_cnt;    /* the number of cmd args */
+    unsigned char authen_method;
+    unsigned char priv_lvl;
+    unsigned char authen_type;
+    unsigned char authen_service;
+    unsigned char user_len;
+    unsigned char port_len;
+    unsigned char r_addr_len;
+    unsigned char arg_cnt;    /* the number of cmd args */
 };
 
 #define TAC_ACCT_REQ_FIXED_FIELDS_SIZE 9
 
 struct acct_reply {
-    u_short msg_len;
-    u_short data_len;
-    u_char status;
+    unsigned short msg_len;
+    unsigned short data_len;
+    unsigned char status;
 
 #define TAC_PLUS_ACCT_STATUS_SUCCESS 0x1
 #define TAC_PLUS_ACCT_STATUS_ERROR   0x2
@@ -192,25 +192,25 @@ struct acct_reply {
 
 /* An authorization request packet */
 struct author {
-    u_char authen_method;
-    u_char priv_lvl;
-    u_char authen_type;
-    u_char service;
-
-    u_char user_len;
-    u_char port_len;
-    u_char r_addr_len;
-    u_char arg_cnt;    /* the number of args */
+    unsigned char authen_method;
+    unsigned char priv_lvl;
+    unsigned char authen_type;
+    unsigned char service;
+
+    unsigned char user_len;
+    unsigned char port_len;
+    unsigned char r_addr_len;
+    unsigned char arg_cnt;    /* the number of args */
 };
 
 #define TAC_AUTHOR_REQ_FIXED_FIELDS_SIZE 8
 
 /* An authorization reply packet */
 struct author_reply {
-    u_char status;
-    u_char arg_cnt;
-    u_short msg_len;
-    u_short data_len;
+    unsigned char status;
+    unsigned char arg_cnt;
+    unsigned short msg_len;
+    unsigned short data_len;
 
 #define TAC_PLUS_AUTHOR_STATUS_PASS_ADD  0x01
 #define TAC_PLUS_AUTHOR_STATUS_PASS_REPL 0x02
diff --git a/libtac/lib/acct_r.c b/libtac/lib/acct_r.c
index 44992e6..29ed901 100644
--- a/libtac/lib/acct_r.c
+++ b/libtac/lib/acct_r.c
@@ -110,7 +110,7 @@ int tac_acct_read(int fd, struct areply *re) {
     }
 
     /* decrypt the body */
-    _tac_crypt((u_char *) tb, &th);
+    _tac_crypt((unsigned char *) tb, &th);
 
     /* Convert network byte order to host byte order */
     tb->msg_len  = ntohs(tb->msg_len);
@@ -133,7 +133,7 @@ int tac_acct_read(int fd, struct areply *re) {
     /* save status and clean up */
     if(tb->msg_len) {
         msg=(char *) xcalloc(1, tb->msg_len+1);
-        bcopy((u_char *) tb+TAC_ACCT_REPLY_FIXED_FIELDS_SIZE, msg, tb->msg_len);
+        bcopy((unsigned char *) tb+TAC_ACCT_REPLY_FIXED_FIELDS_SIZE, msg, tb->msg_len);
         msg[(int)tb->msg_len] = '\0';
         re->msg = msg;      /* Freed by caller */
     }
diff --git a/libtac/lib/acct_s.c b/libtac/lib/acct_s.c
index db68067..4338ef2 100644
--- a/libtac/lib/acct_s.c
+++ b/libtac/lib/acct_s.c
@@ -50,14 +50,14 @@ int tac_acct_send(int fd, int type, const char *user, char *tty,
 
     HDR *th;
     struct acct tb;
-    u_char user_len, port_len, r_addr_len;
+    unsigned char user_len, port_len, r_addr_len;
     struct tac_attrib *a;
     int i = 0;    /* arg count */
     int pkt_len = 0;
     int pktl = 0;
     int w;    /* write count */
-    u_char *pkt=NULL;
-    /* u_char *pktp; */             /* obsolute */
+    unsigned char *pkt=NULL;
+    /* unsigned char *pktp; */             /* obsolute */
     int ret = 0;
 
     th = _tac_req_header(TAC_PLUS_ACCT, 0);
@@ -71,11 +71,11 @@ int tac_acct_send(int fd, int type, const char *user, char *tty,
         (tac_encryption) ? "yes" : "no", \
         tac_acct_flag2str(type));
         
-    user_len=(u_char) strlen(user);
-    port_len=(u_char) strlen(tty);
-    r_addr_len=(u_char) strlen(r_addr);
+    user_len=(unsigned char) strlen(user);
+    port_len=(unsigned char) strlen(tty);
+    r_addr_len=(unsigned char) strlen(r_addr);
 
-    tb.flags=(u_char) type;
+    tb.flags=(unsigned char) type;
     tb.authen_method=tac_authen_method;
     tb.priv_lvl=tac_priv_lvl;
     if (!*tac_login) {
@@ -96,7 +96,7 @@ int tac_acct_send(int fd, int type, const char *user, char *tty,
     tb.r_addr_len=r_addr_len;
 
     /* allocate packet */
-    pkt=(u_char *) xcalloc(1, TAC_ACCT_REQ_FIXED_FIELDS_SIZE);
+    pkt=(unsigned char *) xcalloc(1, TAC_ACCT_REQ_FIXED_FIELDS_SIZE);
     pkt_len=sizeof(tb);
 
     /* fill attribute length fields */
@@ -104,7 +104,7 @@ int tac_acct_send(int fd, int type, const char *user, char *tty,
     while (a) {
         pktl = pkt_len;
         pkt_len += sizeof(a->attr_len);
-        pkt = (u_char*) xrealloc(pkt, pkt_len);
+        pkt = (unsigned char*) xrealloc(pkt, pkt_len);
 
         /* see comments in author_s.c
         pktp=pkt + pkt_len;
@@ -132,7 +132,7 @@ int tac_acct_send(int fd, int type, const char *user, char *tty,
 #define PUTATTR(data, len) \
     pktl = pkt_len; \
     pkt_len += len; \
-    pkt = (u_char*) xrealloc(pkt, pkt_len); \
+    pkt = (unsigned char*) xrealloc(pkt, pkt_len); \
     bcopy(data, pkt + pktl, len);
 
     /* fill user and port fields */
diff --git a/libtac/lib/attrib.c b/libtac/lib/attrib.c
index b8a7d82..c148288 100644
--- a/libtac/lib/attrib.c
+++ b/libtac/lib/attrib.c
@@ -29,14 +29,14 @@ void tac_add_attrib(struct tac_attrib **attr, char *name, char *value) {
 
 void tac_add_attrib_pair(struct tac_attrib **attr, char *name, char sep, char *value) {
     struct tac_attrib *a;
-    u_char l1 = (u_char) strlen(name);
-    u_char l2;
+    unsigned char l1 = (unsigned char) strlen(name);
+    unsigned char l2;
     int total_len;
 
     if (value == NULL) {
         l2 = 0;
     } else {
-        l2 = (u_char) strlen(value);
+        l2 = (unsigned char) strlen(value);
     }
     total_len = l1 + l2 + 1; /* "name" + "=" + "value" */
 
diff --git a/libtac/lib/authen_r.c b/libtac/lib/authen_r.c
index cc03e9b..3ffdc4d 100644
--- a/libtac/lib/authen_r.c
+++ b/libtac/lib/authen_r.c
@@ -106,7 +106,7 @@ int tac_authen_read(int fd, struct areply *re) {
 	}
 
 	/* decrypt the body */
-	_tac_crypt((u_char *) tb, &th);
+	_tac_crypt((unsigned char *) tb, &th);
 
 	/* Convert network byte order to host byte order */
 	tb->msg_len = ntohs(tb->msg_len);
diff --git a/libtac/lib/authen_s.c b/libtac/lib/authen_s.c
index b33d954..3bbb51a 100644
--- a/libtac/lib/authen_s.c
+++ b/libtac/lib/authen_s.c
@@ -34,7 +34,7 @@
 
 /* assume digest points to a buffer MD5_LEN size */
 static void
-digest_chap(u_char digest[MD5_LBLOCK], uint8_t id,
+digest_chap(unsigned char digest[MD5_LBLOCK], uint8_t id,
             const char *pass, unsigned pass_len,
             const char *chal, unsigned chal_len) {
 
@@ -46,8 +46,8 @@ digest_chap(u_char digest[MD5_LBLOCK], uint8_t id,
      * for a single call.
      */
     MD5_Update(&mdcontext, &id, sizeof(id));
-    MD5_Update(&mdcontext, (const u_char *)pass, pass_len);
-    MD5_Update(&mdcontext, (const u_char *)chal, chal_len);
+    MD5_Update(&mdcontext, (const unsigned char *)pass, pass_len);
+    MD5_Update(&mdcontext, (const unsigned char *)chal, chal_len);
     MD5_Final(digest, &mdcontext);
 }
 
@@ -62,7 +62,7 @@ digest_chap(u_char digest[MD5_LBLOCK], uint8_t id,
  *             LIBTAC_STATUS_ASSEMBLY_ERR
  */
 int tac_authen_send(int fd, const char *user, const char *pass, const char *tty,
-		const char *r_addr, u_char action) {
+		const char *r_addr, unsigned char action) {
 
 	HDR *th; /* TACACS+ packet header */
 	struct authen_start tb; /* message body */
@@ -72,7 +72,7 @@ int tac_authen_send(int fd, const char *user, const char *pass, const char *tty,
 	int ret = 0;
 	char *chal = "1234123412341234";
 	char *token = NULL;
-	u_char *pkt = NULL;
+	unsigned char *pkt = NULL;
 	const uint8_t id = 5;
 
 	th = _tac_req_header(TAC_PLUS_AUTHEN, 0);
@@ -99,7 +99,7 @@ int tac_authen_send(int fd, const char *user, const char *pass, const char *tty,
 	r_addr_len = strlen(r_addr);
 
 	if (!strcmp(tac_login, "chap")) {
-		u_char digest[MD5_LBLOCK];
+		unsigned char digest[MD5_LBLOCK];
 
 		digest_chap(digest, id, pass, pass_len, chal, chal_len);
 
@@ -159,7 +159,7 @@ int tac_authen_send(int fd, const char *user, const char *pass, const char *tty,
 	}
 
 	/* build the packet */
-	pkt = (u_char *) xcalloc(1, bodylength + 10);
+	pkt = (unsigned char *) xcalloc(1, bodylength + 10);
 
 	bcopy(&tb, pkt + pkt_len, sizeof(tb)); /* packet body beginning */
 	pkt_len += sizeof(tb);
diff --git a/libtac/lib/author_r.c b/libtac/lib/author_r.c
index a677de0..19a72c9 100644
--- a/libtac/lib/author_r.c
+++ b/libtac/lib/author_r.c
@@ -43,7 +43,7 @@ int tac_author_read(int fd, struct areply *re) {
 	struct author_reply *tb = NULL;
 	size_t len_from_header, len_from_body;
 	ssize_t packet_read;
-	u_char *pktp = NULL;
+	unsigned char *pktp = NULL;
 	char *msg = NULL;
 	int timeleft = 0;
 	re->msg = NULL;
@@ -114,7 +114,7 @@ int tac_author_read(int fd, struct areply *re) {
 	}
 
 	/* decrypt the body */
-	_tac_crypt((u_char *) tb, &th);
+	_tac_crypt((unsigned char *) tb, &th);
 
 	/* Convert network byte order to host byte order */
 	tb->msg_len = ntohs(tb->msg_len);
@@ -127,7 +127,7 @@ int tac_author_read(int fd, struct areply *re) {
 	len_from_body = TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE + tb->msg_len
 			+ tb->data_len;
 
-	pktp = (u_char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE;
+	pktp = (unsigned char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE;
 
 	/* cycle through the arguments supplied in the packet */
 	for (r = 0; r < tb->arg_cnt && r < TAC_PLUS_MAX_ARGCOUNT;
@@ -141,7 +141,7 @@ int tac_author_read(int fd, struct areply *re) {
 			free(tb);
 			return re->status;
 		}
-		len_from_body += sizeof(u_char); /* add arg length field's size*/
+		len_from_body += sizeof(unsigned char); /* add arg length field's size*/
 		len_from_body += *pktp; /* add arg length itself */
 		pktp++;
 	}
@@ -160,8 +160,8 @@ int tac_author_read(int fd, struct areply *re) {
 	if (tb->msg_len) {
 		char *msg = (char *) xcalloc(1, tb->msg_len + 1);
 		bcopy(
-				(u_char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE
-						+ (tb->arg_cnt) * sizeof(u_char), msg, tb->msg_len);
+				(unsigned char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE
+						+ (tb->arg_cnt) * sizeof(unsigned char), msg, tb->msg_len);
 		msg[(int) tb->msg_len] = '\0';
 		re->msg = msg; /* freed by caller */
 	}
@@ -170,8 +170,8 @@ int tac_author_read(int fd, struct areply *re) {
 	if (tb->data_len) {
 		char *smsg = (char *) xcalloc(1, tb->data_len + 1);
 		bcopy(
-				(u_char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE
-						+ (tb->arg_cnt) * sizeof(u_char) + tb->msg_len, smsg,
+				(unsigned char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE
+						+ (tb->arg_cnt) * sizeof(unsigned char) + tb->msg_len, smsg,
 				tb->data_len);
 		smsg[(int) tb->data_len] = '\0';
 		TACSYSLOG(LOG_ERR, "%s: reply message: %s", __FUNCTION__, smsg);
@@ -190,7 +190,7 @@ int tac_author_read(int fd, struct areply *re) {
 		/*FALLTHRU*/
 
 	case TAC_PLUS_AUTHOR_STATUS_PASS_ADD: {
-		u_char *argp;
+		unsigned char *argp;
 
 		if (!re->msg)
 			re->msg = xstrdup(author_ok_msg);
@@ -198,8 +198,8 @@ int tac_author_read(int fd, struct areply *re) {
 
 		/* add attributes received to attribute list returned to
 		 the client */
-		pktp = (u_char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE;
-		argp = pktp + (tb->arg_cnt * sizeof(u_char)) + tb->msg_len
+		pktp = (unsigned char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE;
+		argp = pktp + (tb->arg_cnt * sizeof(unsigned char)) + tb->msg_len
 				+ tb->data_len;
 		TACSYSLOG(LOG_DEBUG, "Args cnt %d", tb->arg_cnt);
 		/* argp points to current argument string
diff --git a/libtac/lib/author_s.c b/libtac/lib/author_s.c
index d067e2c..db05008 100644
--- a/libtac/lib/author_s.c
+++ b/libtac/lib/author_s.c
@@ -37,14 +37,14 @@ int tac_author_send(int fd, const char *user, char *tty, char *r_addr,
 
 	HDR *th;
 	struct author tb;
-	u_char user_len, port_len, r_addr_len;
+	unsigned char user_len, port_len, r_addr_len;
 	struct tac_attrib *a;
 	int i = 0; /* attributes count */
 	int pkt_len = 0; /* current packet length */
 	int pktl = 0; /* temporary storage for previous pkt_len values */
 	int w; /* write() return value */
-	u_char *pkt = NULL; /* packet building pointer */
-	/* u_char *pktp; *//* obsolete */
+	unsigned char *pkt = NULL; /* packet building pointer */
+	/* unsigned char *pktp; *//* obsolete */
 	int ret = 0;
 
 	th = _tac_req_header(TAC_PLUS_AUTHOR, 0);
@@ -59,9 +59,9 @@ int tac_author_send(int fd, const char *user, char *tty, char *r_addr,
 					__FUNCTION__, user,
 					tty, r_addr, tac_encryption ? "yes" : "no");
 
-	user_len = (u_char) strlen(user);
-	port_len = (u_char) strlen(tty);
-	r_addr_len = (u_char) strlen(r_addr);
+	user_len = (unsigned char) strlen(user);
+	port_len = (unsigned char) strlen(tty);
+	r_addr_len = (unsigned char) strlen(r_addr);
 
 	tb.authen_method = tac_authen_method;
 	tb.priv_lvl = tac_priv_lvl;
@@ -83,7 +83,7 @@ int tac_author_send(int fd, const char *user, char *tty, char *r_addr,
 	tb.r_addr_len = r_addr_len;
 
 	/* allocate packet */
-	pkt = (u_char *) xcalloc(1, TAC_AUTHOR_REQ_FIXED_FIELDS_SIZE);
+	pkt = (unsigned char *) xcalloc(1, TAC_AUTHOR_REQ_FIXED_FIELDS_SIZE);
 	pkt_len = sizeof(tb);
 
 	/* fill attribute length fields */
@@ -91,7 +91,7 @@ int tac_author_send(int fd, const char *user, char *tty, char *r_addr,
 	while (a) {
 		pktl = pkt_len;
 		pkt_len += sizeof(a->attr_len);
-		pkt = (u_char*) xrealloc(pkt, pkt_len);
+		pkt = (unsigned char*) xrealloc(pkt, pkt_len);
 
 		/* bad method: realloc() is allowed to return different pointer
 		 with each call
@@ -120,7 +120,7 @@ int tac_author_send(int fd, const char *user, char *tty, char *r_addr,
 #define PUTATTR(data, len) \
     pktl = pkt_len; \
     pkt_len += len; \
-    pkt = (u_char*) xrealloc(pkt, pkt_len); \
+    pkt = (unsigned char*) xrealloc(pkt, pkt_len); \
     bcopy(data, pkt + pktl, len);
 
 	/* fill user and port fields */
diff --git a/libtac/lib/cont_s.c b/libtac/lib/cont_s.c
index e281567..50c01d9 100644
--- a/libtac/lib/cont_s.c
+++ b/libtac/lib/cont_s.c
@@ -41,7 +41,7 @@ int tac_cont_send_seq(int fd, const char *pass, int seq) {
 	int pass_len, bodylength, w;
 	int pkt_len = 0;
 	int ret = 0;
-	u_char *pkt = NULL;
+	unsigned char *pkt = NULL;
 
 	th = _tac_req_header(TAC_PLUS_AUTHEN, 1);
 
@@ -75,7 +75,7 @@ int tac_cont_send_seq(int fd, const char *pass, int seq) {
 	}
 
 	/* build the packet */
-	pkt = (u_char *) xcalloc(1, bodylength);
+	pkt = (unsigned char *) xcalloc(1, bodylength);
 
 	bcopy(&tb, pkt + pkt_len, TAC_AUTHEN_CONT_FIXED_FIELDS_SIZE); /* packet body beginning */
 	pkt_len += TAC_AUTHEN_CONT_FIXED_FIELDS_SIZE;
diff --git a/libtac/lib/crypt.c b/libtac/lib/crypt.c
index b3e3158..5bf0107 100644
--- a/libtac/lib/crypt.c
+++ b/libtac/lib/crypt.c
@@ -36,7 +36,7 @@
    Use data from packet header and secret, which
    should be a global variable */
 static void _tac_md5_pad(const HDR *hdr,
-        u_char *new_digest, u_char *old_digest)  {
+        unsigned char *new_digest, unsigned char *old_digest)  {
     unsigned tac_secret_len = strlen(tac_secret);
     MD5_CTX mdcontext;
 
@@ -45,8 +45,8 @@ static void _tac_md5_pad(const HDR *hdr,
 
     /* place session_id, key, version and seq_no in buffer */
     MD5_Init(&mdcontext);
-    MD5_Update(&mdcontext, (const u_char *) &hdr->session_id, sizeof(hdr->session_id));
-    MD5_Update(&mdcontext, (const u_char *) tac_secret, tac_secret_len);
+    MD5_Update(&mdcontext, (const unsigned char *) &hdr->session_id, sizeof(hdr->session_id));
+    MD5_Update(&mdcontext, (const unsigned char *) tac_secret, tac_secret_len);
     MD5_Update(&mdcontext, &hdr->version, sizeof(hdr->version));
     MD5_Update(&mdcontext, &hdr->seq_no, sizeof(hdr->seq_no));
 
@@ -62,12 +62,12 @@ static void _tac_md5_pad(const HDR *hdr,
 /* Perform encryption/decryption on buffer. This means simply XORing
    each byte from buffer with according byte from pseudo-random
    pad. */
-void _tac_crypt(u_char *buf, const HDR *th) {
+void _tac_crypt(unsigned char *buf, const HDR *th) {
     unsigned i, j, length = ntohl(th->datalength);
  
     /* null operation if no encryption requested */
     if((tac_secret != NULL) && (th->encryption & TAC_PLUS_UNENCRYPTED_FLAG) != TAC_PLUS_UNENCRYPTED_FLAG) {
-        u_char digest[MD5_LBLOCK];
+        unsigned char digest[MD5_LBLOCK];
  
         for (i=0; i<length; i++) {
             j = i % MD5_LBLOCK;
diff --git a/libtac/lib/header.c b/libtac/lib/header.c
index 2156d2a..7331947 100644
--- a/libtac/lib/header.c
+++ b/libtac/lib/header.c
@@ -66,7 +66,7 @@ int tac_readtimeout_enable = 0;
  * field depends on the TACACS+ request type and thus it
  * cannot be predefined.
  */
-HDR *_tac_req_header(u_char type, int cont_session) {
+HDR *_tac_req_header(unsigned char type, int cont_session) {
     HDR *th;
 
     th=(HDR *) xcalloc(1, TAC_PLUS_HDR_SIZE);
