Fix strict aliasing problems or add -fno-strict-aliasing
[openafs.git] / src / kauth / krb_udp.c
index 8e5bdd5..9f4f364 100644 (file)
@@ -34,6 +34,7 @@
 #include <afs/com_err.h>
 #include <lwp.h>
 #include <des.h>
+#include <des_prototypes.h>
 #include <rx/xdr.h>
 #include <rx/rx.h>
 #include <rx/rxkad.h>
 
 #include "kauth.h"
 #include "kautils.h"
+#include "kauth_internal.h"
 #include "kaserver.h"
 #include "prot.h"              /* protocol definitions */
 #include "kaport.h"
 #include "afs/audit.h"
 #include "kalog.h"
+#include "kadatabase.h"
 
 /* my kerberos error codes */
 #define KERB_ERR_BAD_MSG_TYPE  99
@@ -118,18 +121,10 @@ FiveMinuteCheckLWP(void *unused)
 
 
 static afs_int32
-create_cipher(cipher, cipherLen, sessionKey, sname, sinst, start, end, kvno,
-             ticket, ticketLen, key)
-     char *cipher;
-     int *cipherLen;
-     struct ktc_encryptionKey *sessionKey;
-     char *sname;
-     char *sinst;
-     Date start, end;
-     afs_int32 kvno;
-     char *ticket;
-     int ticketLen;
-     struct ktc_encryptionKey *key;
+create_cipher(char *cipher, int *cipherLen,
+             struct ktc_encryptionKey *sessionKey, char *sname,
+             char *sinst, Date start, Date end, afs_int32 kvno,
+             char *ticket, int ticketLen, struct ktc_encryptionKey *key)
 {
     char *answer;
     int slen;
@@ -168,9 +163,9 @@ create_cipher(cipher, cipherLen, sessionKey, sname, sinst, start, end, kvno,
        printf("\n");
     }
 
-    if (code = des_key_sched(key, schedule))
+    if ((code = des_key_sched(ktc_to_cblock(key), schedule)))
        printf("In KAAuthenticate: key_sched returned %d\n", code);
-    des_pcbc_encrypt(cipher, cipher, len, schedule, key, ENCRYPT);
+    des_pcbc_encrypt(cipher, cipher, len, schedule, ktc_to_cblockptr(key), ENCRYPT);
     *cipherLen = round_up_to_ebs(len);
 
     if (krb_udp_debug) {
@@ -182,14 +177,8 @@ create_cipher(cipher, cipherLen, sessionKey, sname, sinst, start, end, kvno,
 }
 
 static afs_int32
-create_reply(ans, name, inst, startTime, endTime, kvno, cipher, cipherLen)
-     struct packet *ans;
-     char *name;
-     char *inst;
-     Date startTime, endTime;
-     afs_int32 kvno;
-     char *cipher;
-     int cipherLen;
+create_reply(struct packet *ans, char *name, char *inst, Date startTime,
+            Date endTime, afs_int32 kvno, char *cipher, int cipherLen)
 {
     char *answer = ans->data;
     int slen;
@@ -223,24 +212,18 @@ create_reply(ans, name, inst, startTime, endTime, kvno, cipher, cipherLen)
 }
 
 static afs_int32
-check_auth(pkt, auth, authLen, key, name, inst, cell)
-     struct packet *pkt;
-     char *auth;
-     int authLen;
-     struct ktc_encryptionKey *key;
-     char *name;
-     char *inst;
-     char *cell;
+check_auth(struct packet *pkt, char *auth, int authLen,
+          struct ktc_encryptionKey *key, char *name, char *inst,
+          char *cell)
 {
     char *packet;
     des_key_schedule schedule;
     afs_int32 cksum;
-    /* unsigned char time_msec; */
     afs_int32 time_sec;
     int byteOrder = pkt->byteOrder;
 
-    des_key_sched(key, schedule);
-    des_pcbc_encrypt(auth, auth, authLen, schedule, key, DECRYPT);
+    des_key_sched(ktc_to_cblock(key), schedule);
+    des_pcbc_encrypt(auth, auth, authLen, schedule, ktc_to_cblockptr(key), DECRYPT);
     packet = auth;
     if (strcmp(packet, name) != 0)
        return KABADTICKET;
@@ -252,7 +235,8 @@ check_auth(pkt, auth, authLen, key, name, inst, cell)
        return KABADTICKET;
     packet += strlen(packet) + 1;
     getint(cksum);
-    /* time_msec = */ *(unsigned char *)packet++;
+    /* Comments in the original IBM source suggest this byte was/is "time_msec" */
+    packet++;
     getint(time_sec);
     if ((packet - auth) > authLen)
        return KABADTICKET;
@@ -260,15 +244,9 @@ check_auth(pkt, auth, authLen, key, name, inst, cell)
 }
 
 afs_int32
-UDP_Authenticate(ksoc, client, name, inst, startTime, endTime, sname, sinst)
-     int ksoc;
-     struct sockaddr_in *client;
-     char *name;
-     char *inst;
-     Date startTime;
-     Date endTime;
-     char *sname;
-     char *sinst;
+UDP_Authenticate(int ksoc, struct sockaddr_in *client, char *name,
+                char *inst, Date startTime, Date endTime, char *sname,
+                char *sinst)
 {
     struct ubik_trans *tt;
     afs_int32 to;              /* offset of block */
@@ -290,7 +268,7 @@ UDP_Authenticate(ksoc, client, name, inst, startTime, endTime, sname, sinst)
     COUNT_REQ(UAuthenticate);
     if (!name_instance_legal(name, inst))
        return KERB_ERR_NAME_EXP;       /* KABADNAME */
-    if (code = InitAuthServ(&tt, LOCKREAD, this_op))
+    if ((code = InitAuthServ(&tt, LOCKREAD, this_op)))
        return code;
 
     code = FindBlock(tt, name, inst, &to, &tentry);
@@ -329,7 +307,8 @@ UDP_Authenticate(ksoc, client, name, inst, startTime, endTime, sname, sinst)
            afs_uint32 temp;    /* unsigned for safety */
            afs_uint32 pwexpires;
 
-           temp = ntohl(*((afs_int32 *) (tentry.misc_auth_bytes)));
+           memcpy(&temp, tentry.misc_auth_bytes, sizeof(afs_uint32));
+           temp = ntohl(temp);
            unpack_long(temp, misc_auth_bytes);
            pwexpires = misc_auth_bytes[0];
            if (pwexpires) {
@@ -344,7 +323,7 @@ UDP_Authenticate(ksoc, client, name, inst, startTime, endTime, sname, sinst)
        }
 
        /* make the ticket */
-       code = des_random_key(&sessionKey);
+       code = des_random_key(ktc_to_cblock(&sessionKey));
        if (code) {
            code = KERB_ERR_NULL_KEY;   /* was KANOKEYS */
            goto abort;
@@ -414,15 +393,9 @@ UDP_Authenticate(ksoc, client, name, inst, startTime, endTime, sname, sinst)
 }
 
 afs_int32
-UDP_GetTicket(ksoc, pkt, kvno, authDomain, ticket, ticketLen, auth, authLen)
-     int ksoc;
-     struct packet *pkt;
-     afs_int32 kvno;
-     char *authDomain;
-     char *ticket;
-     int ticketLen;
-     char *auth;
-     int authLen;
+UDP_GetTicket(int ksoc, struct packet *pkt, afs_int32 kvno,
+             char *authDomain, char *ticket, int ticketLen, char *auth,
+             int authLen)
 {
     afs_int32 code;
     struct ktc_encryptionKey tgskey;
@@ -460,7 +433,7 @@ UDP_GetTicket(ksoc, pkt, kvno, authDomain, ticket, ticketLen, auth, authLen)
 
     COUNT_REQ(UGetTicket);
 
-    if (code = InitAuthServ(&tt, LOCKREAD, this_op))
+    if ((code = InitAuthServ(&tt, LOCKREAD, this_op)))
        goto fail;
     code =
        ka_LookupKvno(tt, KA_TGS_NAME,
@@ -563,7 +536,7 @@ UDP_GetTicket(ksoc, pkt, kvno, authDomain, ticket, ticketLen, auth, authLen)
     if (ntohl(server.flags) & KAFNOSEAL)
        return KABADSERVER;
 
-    code = des_random_key(&sessionKey);
+    code = des_random_key(ktc_to_cblock(&sessionKey));
     if (code) {
        code = KERB_ERR_NULL_KEY;       /* was KANOKEYS */
        goto fail;
@@ -621,11 +594,7 @@ UDP_GetTicket(ksoc, pkt, kvno, authDomain, ticket, ticketLen, auth, authLen)
 }
 
 static int
-err_packet(ksoc, pkt, code, reason)
-     int ksoc;
-     struct packet *pkt;
-     afs_int32 code;
-     char *reason;
+err_packet(int ksoc, struct packet *pkt, afs_int32 code, char *reason)
 {
     struct packet ans;
     char *answer = ans.data;
@@ -678,9 +647,7 @@ err_packet(ksoc, pkt, code, reason)
 }
 
 int
-process_udp_auth(ksoc, pkt)
-     int ksoc;
-     struct packet *pkt;
+process_udp_auth(int ksoc, struct packet *pkt)
 {
     char *packet = pkt->rest;
     char name[MAXKTCNAMELEN];
@@ -747,9 +714,7 @@ process_udp_auth(ksoc, pkt)
 }
 
 int
-process_udp_appl(ksoc, pkt)
-     int ksoc;
-     struct packet *pkt;
+process_udp_appl(int ksoc, struct packet *pkt)
 {
     char *packet = pkt->rest;
     afs_int32 kvno;
@@ -792,9 +757,7 @@ process_udp_appl(ksoc, pkt)
 }
 
 void
-process_udp_request(ksoc, pkt)
-     int ksoc;
-     struct packet *pkt;
+process_udp_request(int ksoc, struct packet *pkt)
 {
     char *packet = pkt->data;
     unsigned char version, auth_msg_type;
@@ -830,7 +793,7 @@ SocketListener(void *unused)
     fd_set rfds;
     struct timeval tv;
     struct packet packet;
-    int fromLen;
+    socklen_t fromLen;
     afs_int32 code;
 
     printf("Starting to listen for UDP packets\n");
@@ -915,10 +878,11 @@ SocketListener(void *unused)
 
 #include "AFS_component_version_number.c"
 
-main()
+int
+main(int, char **)
 #else
 afs_int32
-init_krb_udp()
+init_krb_udp(void)
 #endif
 {
     struct sockaddr_in taddr;