jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c
changeset 22658 30164afa0211
parent 22648 7bcdb55f70ff
child 23010 6dadb192ad81
equal deleted inserted replaced
22657:654c573cb341 22658:30164afa0211
    73          */
    73          */
    74         fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;");
    74         fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;");
    75         if (fid == 0) {
    75         if (fid == 0) {
    76             (*env)->ExceptionClear(env);
    76             (*env)->ExceptionClear(env);
    77             throwIllegalArgumentException(env, "invalid field: username");
    77             throwIllegalArgumentException(env, "invalid field: username");
    78             return;
    78             goto cleanupAndReturn;
    79         }
    79         }
    80         jstr = (*env)->NewStringUTF(env, pwd.pw_name);
    80         jstr = (*env)->NewStringUTF(env, pwd.pw_name);
    81         if (jstr == NULL)
    81         if (jstr == NULL) {
    82             return;
    82             goto cleanupAndReturn;
       
    83         }
    83         (*env)->SetObjectField(env, obj, fid, jstr);
    84         (*env)->SetObjectField(env, obj, fid, jstr);
    84 
    85 
    85         /*
    86         /*
    86          * set uid
    87          * set uid
    87          */
    88          */
    88         fid = (*env)->GetFieldID(env, cls, "uid", "J");
    89         fid = (*env)->GetFieldID(env, cls, "uid", "J");
    89         if (fid == 0) {
    90         if (fid == 0) {
    90             (*env)->ExceptionClear(env);
    91             (*env)->ExceptionClear(env);
    91             throwIllegalArgumentException(env, "invalid field: uid");
    92             throwIllegalArgumentException(env, "invalid field: uid");
    92             return;
    93             goto cleanupAndReturn;
    93         }
    94         }
    94         (*env)->SetLongField(env, obj, fid, pwd.pw_uid);
    95         (*env)->SetLongField(env, obj, fid, pwd.pw_uid);
    95 
    96 
    96         /*
    97         /*
    97          * set gid
    98          * set gid
    98          */
    99          */
    99         fid = (*env)->GetFieldID(env, cls, "gid", "J");
   100         fid = (*env)->GetFieldID(env, cls, "gid", "J");
   100         if (fid == 0) {
   101         if (fid == 0) {
   101             (*env)->ExceptionClear(env);
   102             (*env)->ExceptionClear(env);
   102             throwIllegalArgumentException(env, "invalid field: gid");
   103             throwIllegalArgumentException(env, "invalid field: gid");
   103             return;
   104             goto cleanupAndReturn;
   104         }
   105         }
   105         (*env)->SetLongField(env, obj, fid, pwd.pw_gid);
   106         (*env)->SetLongField(env, obj, fid, pwd.pw_gid);
   106 
   107 
   107         /*
   108         /*
   108          * set supplementary groups
   109          * set supplementary groups
   109          */
   110          */
   110         fid = (*env)->GetFieldID(env, cls, "groups", "[J");
   111         fid = (*env)->GetFieldID(env, cls, "groups", "[J");
   111         if (fid == 0) {
   112         if (fid == 0) {
   112             (*env)->ExceptionClear(env);
   113             (*env)->ExceptionClear(env);
   113             throwIllegalArgumentException(env, "invalid field: groups");
   114             throwIllegalArgumentException(env, "invalid field: groups");
   114             return;
   115             goto cleanupAndReturn;
   115         }
   116         }
   116 
   117 
   117         jgroups = (*env)->NewLongArray(env, numSuppGroups);
   118         jgroups = (*env)->NewLongArray(env, numSuppGroups);
   118         if (jgroups == NULL)
   119         if (jgroups == NULL) {
   119             return;
   120             goto cleanupAndReturn;
       
   121         }
   120         jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0);
   122         jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0);
   121         if (jgroupsAsArray == NULL)
   123         if (jgroupsAsArray == NULL) {
   122             return;
   124             goto cleanupAndReturn;
       
   125         }
   123         for (i = 0; i < numSuppGroups; i++)
   126         for (i = 0; i < numSuppGroups; i++)
   124             jgroupsAsArray[i] = groups[i];
   127             jgroupsAsArray[i] = groups[i];
   125         (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0);
   128         (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0);
   126         (*env)->SetObjectField(env, obj, fid, jgroups);
   129         (*env)->SetObjectField(env, obj, fid, jgroups);
   127     }
   130     }
       
   131 cleanupAndReturn:
       
   132     free(groups);
       
   133 
   128     return;
   134     return;
   129 }
   135 }