[OpenAFS] pam-afs-session-2.5 and solaris 11 make problem

Russ Allbery rra@stanford.edu
Fri, 01 Jun 2012 17:19:47 -0700


Renata Maria Dart <renata@slac.stanford.edu> writes:

> Hi, I have been trying to compile pam-afs-session-2.5 on solaris 11.  I
> have generated krb5 1.6.2, and heimdal 1.5.2 so that I have libkafs.a
> and libkafs.la, and I have OpenAFS 1.6.1 running on the system.  I am
> using the following configure:

> ./configure --prefix=/opt/pam --with-krb5=/afs/slac.stanford.edu/package/krb5/1.6.2/sunx86_511 --with-libkafs=/afs/slac.stanford.edu/package/heimdal/sunx86_511/sunx86_511

The configure script was unable to find any libkafs library at that path
and is falling back on the internal implementation.

> The make fails:

> In file included from kafs/kafs.c:75:0:
> ./kafs/sys-solaris.c: In function 'k_syscall':
> ./kafs/sys-solaris.c:80:25: error: storage size of 'syscall_data' isn't known
> ./kafs/sys-solaris.c:89:15: error: invalid application of 'sizeof' to incomplete type 'struct afssysargs32' 
> ./kafs/sys-solaris.c:80:25: warning: unused variable 'syscall_data'
> ./kafs/sys-solaris.c:77:13: warning: unused variable 'code'
> *** Error code 1
> make: Fatal error: Command failed for target `kafs/kafs.lo'

The structure namings turned out to neither match the structures defined
in that file or the names used by OpenAFS.  The perils of writing code for
a platform that I can't test.  The following patch should fix it:

diff --git a/kafs/sys-solaris.c b/kafs/sys-solaris.c
index 27dbc46..cb3421f 100644
--- a/kafs/sys-solaris.c
+++ b/kafs/sys-solaris.c
@@ -77,7 +77,7 @@ k_syscall(long call, long param1, long param2, long param3, long param4,
     int fd, code, oerrno, callnum;
 
 #ifdef _ILP32
-    struct afssysargs32 syscall_data;
+    struct afssysargs syscall_data;
 
     syscall_data.syscall = call;
     syscall_data.param1 = param1;
@@ -86,9 +86,9 @@ k_syscall(long call, long param1, long param2, long param3, long param4,
     syscall_data.param4 = param4;
     syscall_data.param5 = 0;
     syscall_data.param6 = 0;
-    callnum = _IOW('C', 2, struct afssysargs32);
+    callnum = _IOW('C', 2, struct afssysargs);
 #else
-    struct afssysargs syscall_data;
+    struct afssysargs64 syscall_data;
 
     syscall_data.syscall = call;
     syscall_data.param1 = param1;
@@ -97,7 +97,7 @@ k_syscall(long call, long param1, long param2, long param3, long param4,
     syscall_data.param4 = param4;
     syscall_data.param5 = 0;
     syscall_data.param6 = 0;
-    callnum = _IOW('C', 1, struct afssysargs);
+    callnum = _IOW('C', 1, struct afssysargs64);
 #endif
 
     fd = open("/dev/afs", O_RDWR);

-- 
Russ Allbery (rra@stanford.edu)             <http://www.eyrie.org/~eagle/>