* uid the user id to assign to the user (0 to have one
* automatically assigned)
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_create
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jusername,
- jstring jpassword, jint uid )
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_create(JNIEnv * env, jclass cls, jint cellHandle,
+ jstring jusername, jstring jpassword,
+ jint uid)
{
- afs_status_t ast;
- char *username;
- char *password;
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
-
- if ( !who ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- // convert java strings
- if ( jusername != NULL ) {
- username = getNativeString(env, jusername);
- if ( username == NULL ) {
- free( who );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- if ( jpassword != NULL ) {
- password = getNativeString(env, jpassword);
- if ( password == NULL ) {
- free( who );
- free( username );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- free( username );
- throwAFSException( env, JAFSNULLPASS );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( strlen( username ) > KAS_MAX_NAME_LEN ) {
- free( who );
- free( username );
- free( password );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- // make sure name doesn't have ":" in it
- if ( strchr( username, ':' ) != (int) NULL ) {
- free( who );
- free( username );
- free( password );
- throwAFSException( env, PRBADNAM );
- return;
- }
-
- // make sure the id isn't negative
- if ( uid < 0 ) {
- free( who );
- free( username );
- free( password );
- // use the "bad arg" error code even though it's an ID exception.
- // There isn't a bad user ID error code
- throwAFSException( env, PRBADARG );
- return;
- }
-
- if ( username != NULL ) {
- internal_makeKasIdentity( username, who );
- }
-
- // create the kas entry
- if (!kas_PrincipalCreate( (void *) cellHandle, NULL, who,
- password, &ast ) ) {
- free( who );
- free( username );
- free( password );
- throwAFSException( env, ast );
- return;
- }
-
- // create the pts entry - if there's an error, make sure to delete
- // the kas entry
- if ( !pts_UserCreate( (void *) cellHandle, username, (int *) &uid, &ast ) ) {
- afs_status_t ast_kd;
- kas_PrincipalDelete( (void *) cellHandle, NULL, who, &ast_kd );
- free( who );
- free( username );
- free( password );
- throwAFSException( env, ast );
- return;
- }
-
- free( who );
- free( username );
- free( password );
+ afs_status_t ast;
+ char *username;
+ char *password;
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+
+ if (!who) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ // convert java strings
+ if (jusername != NULL) {
+ username = getNativeString(env, jusername);
+ if (username == NULL) {
+ free(who);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ free(who);
+ throwAFSException(env, JAFSNULLUSER);
+ return;
+ }
+
+ if (jpassword != NULL) {
+ password = getNativeString(env, jpassword);
+ if (password == NULL) {
+ free(who);
+ free(username);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ free(who);
+ free(username);
+ throwAFSException(env, JAFSNULLPASS);
+ return;
+ }
+
+ // make sure the name is within the allowed bounds
+ if (strlen(username) > KAS_MAX_NAME_LEN) {
+ free(who);
+ free(username);
+ free(password);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
+ }
+ // make sure name doesn't have ":" in it
+ if (strchr(username, ':') != (int)NULL) {
+ free(who);
+ free(username);
+ free(password);
+ throwAFSException(env, PRBADNAM);
+ return;
+ }
+ // make sure the id isn't negative
+ if (uid < 0) {
+ free(who);
+ free(username);
+ free(password);
+ // use the "bad arg" error code even though it's an ID exception.
+ // There isn't a bad user ID error code
+ throwAFSException(env, PRBADARG);
+ return;
+ }
+
+ if (username != NULL) {
+ internal_makeKasIdentity(username, who);
+ }
+ // create the kas entry
+ if (!kas_PrincipalCreate((void *)cellHandle, NULL, who, password, &ast)) {
+ free(who);
+ free(username);
+ free(password);
+ throwAFSException(env, ast);
+ return;
+ }
+ // create the pts entry - if there's an error, make sure to delete
+ // the kas entry
+ if (!pts_UserCreate((void *)cellHandle, username, (int *)&uid, &ast)) {
+ afs_status_t ast_kd;
+ kas_PrincipalDelete((void *)cellHandle, NULL, who, &ast_kd);
+ free(who);
+ free(username);
+ free(password);
+ throwAFSException(env, ast);
+ return;
+ }
+
+ free(who);
+ free(username);
+ free(password);
}
/**
* cellHandle the handle of the cell to which the user belongs
* jusername the name of the user to delete
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_delete
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jusername )
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_delete(JNIEnv * env, jclass cls, jint cellHandle,
+ jstring jusername)
{
- afs_status_t ast;
- char *username;
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
- int kas;
-
- if ( !who ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( jusername != NULL ) {
- username = getNativeString(env, jusername);
- if ( username == NULL ) {
- free( who );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( strlen( username ) > KAS_MAX_NAME_LEN ) {
- free( who );
- free( username );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- internal_makeKasIdentity( username, who );
-
- // delete the kas entry
- if ( !kas_PrincipalDelete( (void *) cellHandle, NULL, who, &ast ) ) {
- if ( ast != KANOENT ) {
- free(who);
- free( username );
- throwAFSException( env, ast );
- return;
+ afs_status_t ast;
+ char *username;
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+ int kas;
+
+ if (!who) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+
+ if (jusername != NULL) {
+ username = getNativeString(env, jusername);
+ if (username == NULL) {
+ free(who);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
} else {
- kas = FALSE;
+ free(who);
+ throwAFSException(env, JAFSNULLUSER);
+ return;
+ }
+
+ // make sure the name is within the allowed bounds
+ if (strlen(username) > KAS_MAX_NAME_LEN) {
+ free(who);
+ free(username);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
}
- }
- //delete the pts entry
- if ( !pts_UserDelete( (void *) cellHandle, username, &ast ) ) {
- // throw exception if there was no such pts user only if there was
- // also no such kas user
- if ( (ast == ADMPTSFAILEDNAMETRANSLATE && !kas ) ||
- ast != ADMPTSFAILEDNAMETRANSLATE ) {
- free( who );
- free( username );
- throwAFSException( env, ast );
- return;
+ internal_makeKasIdentity(username, who);
+
+ // delete the kas entry
+ if (!kas_PrincipalDelete((void *)cellHandle, NULL, who, &ast)) {
+ if (ast != KANOENT) {
+ free(who);
+ free(username);
+ throwAFSException(env, ast);
+ return;
+ } else {
+ kas = FALSE;
+ }
+ }
+ //delete the pts entry
+ if (!pts_UserDelete((void *)cellHandle, username, &ast)) {
+ // throw exception if there was no such pts user only if there was
+ // also no such kas user
+ if ((ast == ADMPTSFAILEDNAMETRANSLATE && !kas)
+ || ast != ADMPTSFAILEDNAMETRANSLATE) {
+ free(who);
+ free(username);
+ throwAFSException(env, ast);
+ return;
+ }
}
- }
- free( who );
- free( username );
+ free(who);
+ free(username);
}
/**
* cellHandle the handle of the cell to which the user belongs
* jusername the name of the user to unlock
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_unlock
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jusername )
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_unlock(JNIEnv * env, jclass cls, jint cellHandle,
+ jstring jusername)
{
- afs_status_t ast;
- char *username;
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
-
- if ( !who ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- // convert java strings
- if ( jusername != NULL ) {
- username = getNativeString(env, jusername);
- if ( username == NULL ) {
- free( who );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( strlen( username ) > KAS_MAX_NAME_LEN ) {
- free( who );
- free( username );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- internal_makeKasIdentity( username, who );
-
- if ( !kas_PrincipalUnlock( (void *) cellHandle, NULL, who, &ast ) ) {
- free( who );
- free( username );
- throwAFSException( env, ast );
- return;
- }
-
- free( who );
- free( username );
+ afs_status_t ast;
+ char *username;
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+
+ if (!who) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ // convert java strings
+ if (jusername != NULL) {
+ username = getNativeString(env, jusername);
+ if (username == NULL) {
+ free(who);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ free(who);
+ throwAFSException(env, JAFSNULLUSER);
+ return;
+ }
+
+ // make sure the name is within the allowed bounds
+ if (strlen(username) > KAS_MAX_NAME_LEN) {
+ free(who);
+ free(username);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
+ }
+
+ internal_makeKasIdentity(username, who);
+
+ if (!kas_PrincipalUnlock((void *)cellHandle, NULL, who, &ast)) {
+ free(who);
+ free(username);
+ throwAFSException(env, ast);
+ return;
+ }
+
+ free(who);
+ free(username);
}
/**
* name the name of the user for which to get the info
* user the User object to populate with the info
*/
-void getUserInfoChar
- (JNIEnv *env, int cellHandle, const char *name, jobject user)
+void
+getUserInfoChar(JNIEnv * env, int cellHandle, const char *name, jobject user)
{
- jstring jowner;
- jstring jcreator;
- jstring jlastModName;
- jstring jencryptionKey;
- jboolean pts;
- jboolean kas;
- pts_UserEntry_t ptsEntry;
- afs_status_t ast;
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
- kas_principalEntry_t kasEntry;
- unsigned int lockedUntil;
-
- if ( !who ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( name != NULL && strlen( name ) > KAS_MAX_NAME_LEN ) {
- free( who );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- if ( name != NULL ) {
- internal_makeKasIdentity( name, who );
- }
-
- // get all the field ids, if you haven't done so already
- if ( userCls == 0 ) {
- internal_getUserClass( env, user );
- }
-
- // get the pts entry
- if ( !pts_UserGet( (void *) cellHandle, name, &ptsEntry, &ast ) ) {
- // if the user has no pts ptsEntry
- if ( ast == ADMPTSFAILEDNAMETRANSLATE ) {
- pts = FALSE;
- } else {
- free( who );
- throwAFSException( env, ast );
+ jstring jowner;
+ jstring jcreator;
+ jstring jlastModName;
+ jstring jencryptionKey;
+ jboolean pts;
+ jboolean kas;
+ pts_UserEntry_t ptsEntry;
+ afs_status_t ast;
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+ kas_principalEntry_t kasEntry;
+ unsigned int lockedUntil;
+
+ if (!who) {
+ throwAFSException(env, JAFSADMNOMEM);
return;
}
- } else {
- pts = TRUE;
- }
-
-
- // get the kas entry
- if ( !kas_PrincipalGet( (void *) cellHandle, NULL, who, &kasEntry, &ast ) ) {
- // no kas entry
- if ( ast == KANOENT ) {
- if ( !pts ) {
- free( who );
- throwAFSException( env, ast );
- return;
+ // make sure the name is within the allowed bounds
+ if (name != NULL && strlen(name) > KAS_MAX_NAME_LEN) {
+ free(who);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
+ }
+
+ if (name != NULL) {
+ internal_makeKasIdentity(name, who);
+ }
+ // get all the field ids, if you haven't done so already
+ if (userCls == 0) {
+ internal_getUserClass(env, user);
+ }
+ // get the pts entry
+ if (!pts_UserGet((void *)cellHandle, name, &ptsEntry, &ast)) {
+ // if the user has no pts ptsEntry
+ if (ast == ADMPTSFAILEDNAMETRANSLATE) {
+ pts = FALSE;
+ } else {
+ free(who);
+ throwAFSException(env, ast);
+ return;
+ }
+ } else {
+ pts = TRUE;
+ }
+
+
+ // get the kas entry
+ if (!kas_PrincipalGet((void *)cellHandle, NULL, who, &kasEntry, &ast)) {
+ // no kas entry
+ if (ast == KANOENT) {
+ if (!pts) {
+ free(who);
+ throwAFSException(env, ast);
+ return;
+ } else {
+ kas = FALSE;
+ }
+ // other
} else {
- kas = FALSE;
+ free(who);
+ throwAFSException(env, ast);
+ return;
}
- // other
} else {
- free( who );
- throwAFSException( env, ast );
+ kas = TRUE;
+ }
+
+ // get the lock status
+ if (kas
+ && !kas_PrincipalLockStatusGet((void *)cellHandle, NULL, who,
+ &lockedUntil, &ast)) {
+ free(who);
+ throwAFSException(env, ast);
return;
}
- } else {
- kas = TRUE;
- }
-
- // get the lock status
- if ( kas && !kas_PrincipalLockStatusGet( (void *) cellHandle, NULL, who,
- &lockedUntil, &ast ) ) {
- free( who );
- throwAFSException( env, ast );
- return;
- }
-
- (*env)->SetBooleanField(env, user, user_ptsField, pts);
- (*env)->SetBooleanField(env, user, user_kasField, kas);
-
- // set the pts fields
- if ( pts ) {
- (*env)->SetIntField(env, user, user_nameUidField, ptsEntry.nameUid);
- (*env)->SetIntField(env, user, user_ownerUidField, ptsEntry.ownerUid);
- (*env)->SetIntField(env, user, user_creatorUidField,
- ptsEntry.creatorUid);
- (*env)->SetIntField(env, user, user_groupCreationQuotaField,
- ptsEntry.groupCreationQuota);
- (*env)->SetIntField(env, user, user_groupMembershipCountField,
- ptsEntry.groupMembershipCount);
-
- if ( ptsEntry.listStatus == PTS_USER_OWNER_ACCESS ) {
- (*env)->SetIntField(env, user, user_listStatusField,
- org_openafs_jafs_User_USER_OWNER_ACCESS);
- } else {
- (*env)->SetIntField(env, user, user_listStatusField,
- org_openafs_jafs_User_USER_ANYUSER_ACCESS);
- }
- if ( ptsEntry.listGroupsOwned == PTS_USER_OWNER_ACCESS ) {
- (*env)->SetIntField(env, user, user_listGroupsOwnedField,
- org_openafs_jafs_User_USER_OWNER_ACCESS);
- } else {
- (*env)->SetIntField(env, user, user_listGroupsOwnedField,
- org_openafs_jafs_User_USER_ANYUSER_ACCESS);
- }
- if ( ptsEntry.listMembership == PTS_USER_OWNER_ACCESS ) {
- (*env)->SetIntField(env, user, user_listMembershipField,
- org_openafs_jafs_User_USER_OWNER_ACCESS);
- } else {
- (*env)->SetIntField(env, user, user_listMembershipField,
- org_openafs_jafs_User_USER_ANYUSER_ACCESS);
- }
-
- jowner = (*env)->NewStringUTF(env, ptsEntry.owner);
- jcreator = (*env)->NewStringUTF(env, ptsEntry.creator);
-
- (*env)->SetObjectField(env, user, user_ownerField, jowner);
- (*env)->SetObjectField(env, user, user_creatorField, jcreator);
-
- }
-
- // set the kas fields
- if ( kas ) {
- char *convertedKey;
- int i;
- if ( kasEntry.adminSetting == KAS_ADMIN ) {
- (*env)->SetIntField(env, user, user_adminSettingField,
- org_openafs_jafs_User_ADMIN);
- } else {
- (*env)->SetIntField(env, user, user_adminSettingField,
- org_openafs_jafs_User_NO_ADMIN);
- }
- if ( kasEntry.tgsSetting == TGS ) {
- (*env)->SetIntField(env, user, user_tgsSettingField,
- org_openafs_jafs_User_GRANT_TICKETS);
- } else {
- (*env)->SetIntField(env, user, user_tgsSettingField,
- org_openafs_jafs_User_NO_GRANT_TICKETS);
- }
- if ( kasEntry.encSetting != NO_ENCRYPT ) {
- (*env)->SetIntField(env, user, user_encSettingField,
- org_openafs_jafs_User_ENCRYPT);
- } else {
- (*env)->SetIntField(env, user, user_encSettingField,
- org_openafs_jafs_User_NO_ENCRYPT);
- }
- if ( kasEntry.cpwSetting == CHANGE_PASSWORD ) {
- (*env)->SetIntField(env, user, user_cpwSettingField,
- org_openafs_jafs_User_CHANGE_PASSWORD);
- } else {
- (*env)->SetIntField(env, user, user_cpwSettingField,
- org_openafs_jafs_User_NO_CHANGE_PASSWORD);
- }
- if ( kasEntry.rpwSetting == REUSE_PASSWORD ) {
- (*env)->SetIntField(env, user, user_rpwSettingField,
- org_openafs_jafs_User_REUSE_PASSWORD);
- } else {
- (*env)->SetIntField(env, user, user_rpwSettingField,
- org_openafs_jafs_User_NO_REUSE_PASSWORD);
- }
- (*env)->SetIntField(env, user, user_userExpirationField,
- kasEntry.userExpiration);
- (*env)->SetIntField(env, user, user_lastModTimeField,
- kasEntry.lastModTime);
- (*env)->SetIntField(env, user, user_lastChangePasswordTimeField,
- kasEntry.lastChangePasswordTime);
- (*env)->SetIntField(env, user, user_maxTicketLifetimeField,
- kasEntry.maxTicketLifetime);
- (*env)->SetIntField(env, user, user_keyVersionField,
- kasEntry.keyVersion);
- (*env)->SetLongField(env, user, user_keyCheckSumField,
- (unsigned int) kasEntry.keyCheckSum);
- (*env)->SetIntField(env, user, user_daysToPasswordExpireField,
- kasEntry.daysToPasswordExpire);
- (*env)->SetIntField(env, user, user_failLoginCountField,
- kasEntry.failLoginCount);
- (*env)->SetIntField(env, user, user_lockTimeField, kasEntry.lockTime);
- (*env)->SetIntField(env, user, user_lockedUntilField, lockedUntil);
-
- jlastModName = (*env)->NewStringUTF(env,
- kasEntry.lastModPrincipal.principal);
- (*env)->SetObjectField(env, user, user_lastModNameField, jlastModName);
-
- convertedKey = (char *) malloc( sizeof(char *)*
- (sizeof(kasEntry.key.key)*4+1) );
- if ( !convertedKey ) {
- free( who );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- for( i = 0; i < sizeof(kasEntry.key.key); i++ ) {
- sprintf( &(convertedKey[i*4]), "\\%0.3o", kasEntry.key.key[i] );
- }
- jencryptionKey = (*env)->NewStringUTF(env, convertedKey);
- (*env)->SetObjectField(env, user, user_encryptionKeyField,
- jencryptionKey);
- free( convertedKey );
- }
- free( who );
+
+ (*env)->SetBooleanField(env, user, user_ptsField, pts);
+ (*env)->SetBooleanField(env, user, user_kasField, kas);
+
+ // set the pts fields
+ if (pts) {
+ (*env)->SetIntField(env, user, user_nameUidField, ptsEntry.nameUid);
+ (*env)->SetIntField(env, user, user_ownerUidField, ptsEntry.ownerUid);
+ (*env)->SetIntField(env, user, user_creatorUidField,
+ ptsEntry.creatorUid);
+ (*env)->SetIntField(env, user, user_groupCreationQuotaField,
+ ptsEntry.groupCreationQuota);
+ (*env)->SetIntField(env, user, user_groupMembershipCountField,
+ ptsEntry.groupMembershipCount);
+
+ if (ptsEntry.listStatus == PTS_USER_OWNER_ACCESS) {
+ (*env)->SetIntField(env, user, user_listStatusField,
+ org_openafs_jafs_User_USER_OWNER_ACCESS);
+ } else {
+ (*env)->SetIntField(env, user, user_listStatusField,
+ org_openafs_jafs_User_USER_ANYUSER_ACCESS);
+ }
+ if (ptsEntry.listGroupsOwned == PTS_USER_OWNER_ACCESS) {
+ (*env)->SetIntField(env, user, user_listGroupsOwnedField,
+ org_openafs_jafs_User_USER_OWNER_ACCESS);
+ } else {
+ (*env)->SetIntField(env, user, user_listGroupsOwnedField,
+ org_openafs_jafs_User_USER_ANYUSER_ACCESS);
+ }
+ if (ptsEntry.listMembership == PTS_USER_OWNER_ACCESS) {
+ (*env)->SetIntField(env, user, user_listMembershipField,
+ org_openafs_jafs_User_USER_OWNER_ACCESS);
+ } else {
+ (*env)->SetIntField(env, user, user_listMembershipField,
+ org_openafs_jafs_User_USER_ANYUSER_ACCESS);
+ }
+
+ jowner = (*env)->NewStringUTF(env, ptsEntry.owner);
+ jcreator = (*env)->NewStringUTF(env, ptsEntry.creator);
+
+ (*env)->SetObjectField(env, user, user_ownerField, jowner);
+ (*env)->SetObjectField(env, user, user_creatorField, jcreator);
+
+ }
+ // set the kas fields
+ if (kas) {
+ char *convertedKey;
+ int i;
+ if (kasEntry.adminSetting == KAS_ADMIN) {
+ (*env)->SetIntField(env, user, user_adminSettingField,
+ org_openafs_jafs_User_ADMIN);
+ } else {
+ (*env)->SetIntField(env, user, user_adminSettingField,
+ org_openafs_jafs_User_NO_ADMIN);
+ }
+ if (kasEntry.tgsSetting == TGS) {
+ (*env)->SetIntField(env, user, user_tgsSettingField,
+ org_openafs_jafs_User_GRANT_TICKETS);
+ } else {
+ (*env)->SetIntField(env, user, user_tgsSettingField,
+ org_openafs_jafs_User_NO_GRANT_TICKETS);
+ }
+ if (kasEntry.encSetting != NO_ENCRYPT) {
+ (*env)->SetIntField(env, user, user_encSettingField,
+ org_openafs_jafs_User_ENCRYPT);
+ } else {
+ (*env)->SetIntField(env, user, user_encSettingField,
+ org_openafs_jafs_User_NO_ENCRYPT);
+ }
+ if (kasEntry.cpwSetting == CHANGE_PASSWORD) {
+ (*env)->SetIntField(env, user, user_cpwSettingField,
+ org_openafs_jafs_User_CHANGE_PASSWORD);
+ } else {
+ (*env)->SetIntField(env, user, user_cpwSettingField,
+ org_openafs_jafs_User_NO_CHANGE_PASSWORD);
+ }
+ if (kasEntry.rpwSetting == REUSE_PASSWORD) {
+ (*env)->SetIntField(env, user, user_rpwSettingField,
+ org_openafs_jafs_User_REUSE_PASSWORD);
+ } else {
+ (*env)->SetIntField(env, user, user_rpwSettingField,
+ org_openafs_jafs_User_NO_REUSE_PASSWORD);
+ }
+ (*env)->SetIntField(env, user, user_userExpirationField,
+ kasEntry.userExpiration);
+ (*env)->SetIntField(env, user, user_lastModTimeField,
+ kasEntry.lastModTime);
+ (*env)->SetIntField(env, user, user_lastChangePasswordTimeField,
+ kasEntry.lastChangePasswordTime);
+ (*env)->SetIntField(env, user, user_maxTicketLifetimeField,
+ kasEntry.maxTicketLifetime);
+ (*env)->SetIntField(env, user, user_keyVersionField,
+ kasEntry.keyVersion);
+ (*env)->SetLongField(env, user, user_keyCheckSumField,
+ (unsigned int)kasEntry.keyCheckSum);
+ (*env)->SetIntField(env, user, user_daysToPasswordExpireField,
+ kasEntry.daysToPasswordExpire);
+ (*env)->SetIntField(env, user, user_failLoginCountField,
+ kasEntry.failLoginCount);
+ (*env)->SetIntField(env, user, user_lockTimeField, kasEntry.lockTime);
+ (*env)->SetIntField(env, user, user_lockedUntilField, lockedUntil);
+
+ jlastModName =
+ (*env)->NewStringUTF(env, kasEntry.lastModPrincipal.principal);
+ (*env)->SetObjectField(env, user, user_lastModNameField,
+ jlastModName);
+
+ convertedKey =
+ (char *)malloc(sizeof(char *) *
+ (sizeof(kasEntry.key.key) * 4 + 1));
+ if (!convertedKey) {
+ free(who);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ for (i = 0; i < sizeof(kasEntry.key.key); i++) {
+ sprintf(&(convertedKey[i * 4]), "\\%0.3o", kasEntry.key.key[i]);
+ }
+ jencryptionKey = (*env)->NewStringUTF(env, convertedKey);
+ (*env)->SetObjectField(env, user, user_encryptionKeyField,
+ jencryptionKey);
+ free(convertedKey);
+ }
+ free(who);
}
/**
* user the User object in which to fill in the
* information
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_getUserInfo
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jname, jobject user)
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_getUserInfo(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jname,
+ jobject user)
{
- char *name;
-
- if ( jname != NULL ) {
- name = getNativeString(env, jname);
- if ( !name ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- getUserInfoChar( env, cellHandle, name, user );
-
- // get class fields if need be
- if ( userCls == 0 ) {
- internal_getUserClass( env, user );
- }
-
- // set name in case blank object
- (*env)->SetObjectField(env, user, user_nameField, jname);
-
- free( name );
+ char *name;
+
+ if (jname != NULL) {
+ name = getNativeString(env, jname);
+ if (!name) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ throwAFSException(env, JAFSNULLUSER);
+ return;
+ }
+
+ getUserInfoChar(env, cellHandle, name, user);
+
+ // get class fields if need be
+ if (userCls == 0) {
+ internal_getUserClass(env, user);
+ }
+ // set name in case blank object
+ (*env)->SetObjectField(env, user, user_nameField, jname);
+
+ free(name);
}
/**
* user the User object containing the desired
* information
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_setUserInfo
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jname, jobject user )
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_setUserInfo(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jname,
+ jobject user)
{
- char *name;
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
- pts_UserUpdateEntry_t ptsEntry;
- afs_status_t ast;
- kas_admin_t isAdmin;
- kas_tgs_t grantTickets;
- kas_enc_t canEncrypt;
- kas_cpw_t canChangePassword;
- kas_rpw_t passwordReuse;
- unsigned int expirationDate;
- unsigned int maxTicketLifetime;
- unsigned int passwordExpires;
- unsigned int failedPasswordAttempts;
- unsigned int failedPasswordLockTime;
- int kas;
- int pts;
-
- if ( !who ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( jname != NULL ) {
- name = getNativeString(env, jname);
- if ( name == NULL ) {
- free( who );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( strlen( name ) > KAS_MAX_NAME_LEN ) {
- free( who );
- free( name );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- internal_makeKasIdentity( name, who );
-
- // get class fields if need be
- if ( userCls == 0 ) {
- internal_getUserClass( env, user );
- }
-
- kas = (*env)->GetBooleanField(env, user, user_kasField);
- pts = (*env)->GetBooleanField(env, user, user_ptsField);
-
- if ( pts ) {
- // set the pts fields:
- ptsEntry.flag = PTS_USER_UPDATE_GROUP_CREATE_QUOTA |
- PTS_USER_UPDATE_PERMISSIONS;
- ptsEntry.groupCreationQuota =
- (*env)->GetIntField(env, user, user_groupCreationQuotaField);
- if ( (*env)->GetIntField(env, user, user_listStatusField) ==
- org_openafs_jafs_User_USER_OWNER_ACCESS ) {
- ptsEntry.listStatus = PTS_USER_OWNER_ACCESS;
- } else {
- ptsEntry.listStatus = PTS_USER_ANYUSER_ACCESS;
- }
- if ( (*env)->GetIntField(env, user, user_listGroupsOwnedField) ==
- org_openafs_jafs_User_USER_OWNER_ACCESS ) {
- ptsEntry.listGroupsOwned = PTS_USER_OWNER_ACCESS;
- } else {
- ptsEntry.listGroupsOwned = PTS_USER_ANYUSER_ACCESS;
+ char *name;
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+ pts_UserUpdateEntry_t ptsEntry;
+ afs_status_t ast;
+ kas_admin_t isAdmin;
+ kas_tgs_t grantTickets;
+ kas_enc_t canEncrypt;
+ kas_cpw_t canChangePassword;
+ kas_rpw_t passwordReuse;
+ unsigned int expirationDate;
+ unsigned int maxTicketLifetime;
+ unsigned int passwordExpires;
+ unsigned int failedPasswordAttempts;
+ unsigned int failedPasswordLockTime;
+ int kas;
+ int pts;
+
+ if (!who) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
}
- if ( (*env)->GetIntField(env, user, user_listMembershipField) ==
- org_openafs_jafs_User_USER_OWNER_ACCESS ) {
- ptsEntry.listMembership = PTS_USER_OWNER_ACCESS;
+
+ if (jname != NULL) {
+ name = getNativeString(env, jname);
+ if (name == NULL) {
+ free(who);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
} else {
- ptsEntry.listMembership = PTS_USER_ANYUSER_ACCESS;
- }
- if ( !pts_UserModify( (void *) cellHandle, name, &ptsEntry, &ast ) ) {
- free( who );
- free( name );
- throwAFSException( env, ast );
- return;
+ free(who);
+ throwAFSException(env, JAFSNULLUSER);
+ return;
}
- }
- if ( kas ) {
- // set the kas fields:
- if ( (*env)->GetIntField(env, user, user_adminSettingField) ==
- org_openafs_jafs_User_ADMIN ) {
- isAdmin = KAS_ADMIN;
- } else {
- isAdmin = NO_KAS_ADMIN;
+ // make sure the name is within the allowed bounds
+ if (strlen(name) > KAS_MAX_NAME_LEN) {
+ free(who);
+ free(name);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
}
- if ( (*env)->GetIntField(env, user, user_tgsSettingField) ==
- org_openafs_jafs_User_GRANT_TICKETS ) {
- grantTickets = TGS;
- } else {
- grantTickets = NO_TGS;
+
+ internal_makeKasIdentity(name, who);
+
+ // get class fields if need be
+ if (userCls == 0) {
+ internal_getUserClass(env, user);
}
- if ( (*env)->GetIntField(env, user, user_encSettingField) ==
- org_openafs_jafs_User_ENCRYPT ) {
- canEncrypt = 0;
- } else {
- canEncrypt = NO_ENCRYPT;
+
+ kas = (*env)->GetBooleanField(env, user, user_kasField);
+ pts = (*env)->GetBooleanField(env, user, user_ptsField);
+
+ if (pts) {
+ // set the pts fields:
+ ptsEntry.flag =
+ PTS_USER_UPDATE_GROUP_CREATE_QUOTA | PTS_USER_UPDATE_PERMISSIONS;
+ ptsEntry.groupCreationQuota =
+ (*env)->GetIntField(env, user, user_groupCreationQuotaField);
+ if ((*env)->GetIntField(env, user, user_listStatusField) ==
+ org_openafs_jafs_User_USER_OWNER_ACCESS) {
+ ptsEntry.listStatus = PTS_USER_OWNER_ACCESS;
+ } else {
+ ptsEntry.listStatus = PTS_USER_ANYUSER_ACCESS;
+ }
+ if ((*env)->GetIntField(env, user, user_listGroupsOwnedField) ==
+ org_openafs_jafs_User_USER_OWNER_ACCESS) {
+ ptsEntry.listGroupsOwned = PTS_USER_OWNER_ACCESS;
+ } else {
+ ptsEntry.listGroupsOwned = PTS_USER_ANYUSER_ACCESS;
+ }
+ if ((*env)->GetIntField(env, user, user_listMembershipField) ==
+ org_openafs_jafs_User_USER_OWNER_ACCESS) {
+ ptsEntry.listMembership = PTS_USER_OWNER_ACCESS;
+ } else {
+ ptsEntry.listMembership = PTS_USER_ANYUSER_ACCESS;
+ }
+ if (!pts_UserModify((void *)cellHandle, name, &ptsEntry, &ast)) {
+ free(who);
+ free(name);
+ throwAFSException(env, ast);
+ return;
+ }
}
- if ( (*env)->GetIntField(env, user, user_cpwSettingField) ==
- org_openafs_jafs_User_CHANGE_PASSWORD ) {
- canChangePassword = CHANGE_PASSWORD;
- } else {
- canChangePassword = NO_CHANGE_PASSWORD;
+
+ if (kas) {
+ // set the kas fields:
+ if ((*env)->GetIntField(env, user, user_adminSettingField) ==
+ org_openafs_jafs_User_ADMIN) {
+ isAdmin = KAS_ADMIN;
+ } else {
+ isAdmin = NO_KAS_ADMIN;
+ }
+ if ((*env)->GetIntField(env, user, user_tgsSettingField) ==
+ org_openafs_jafs_User_GRANT_TICKETS) {
+ grantTickets = TGS;
+ } else {
+ grantTickets = NO_TGS;
+ }
+ if ((*env)->GetIntField(env, user, user_encSettingField) ==
+ org_openafs_jafs_User_ENCRYPT) {
+ canEncrypt = 0;
+ } else {
+ canEncrypt = NO_ENCRYPT;
+ }
+ if ((*env)->GetIntField(env, user, user_cpwSettingField) ==
+ org_openafs_jafs_User_CHANGE_PASSWORD) {
+ canChangePassword = CHANGE_PASSWORD;
+ } else {
+ canChangePassword = NO_CHANGE_PASSWORD;
+ }
+ if ((*env)->GetIntField(env, user, user_rpwSettingField) ==
+ org_openafs_jafs_User_REUSE_PASSWORD) {
+ passwordReuse = REUSE_PASSWORD;
+ } else {
+ passwordReuse = NO_REUSE_PASSWORD;
+ }
+ expirationDate =
+ (*env)->GetIntField(env, user, user_userExpirationField);
+ maxTicketLifetime =
+ (*env)->GetIntField(env, user, user_maxTicketLifetimeField);
+ passwordExpires =
+ (*env)->GetIntField(env, user, user_daysToPasswordExpireField);
+ failedPasswordAttempts =
+ (*env)->GetIntField(env, user, user_failLoginCountField);
+ failedPasswordLockTime =
+ (*env)->GetIntField(env, user, user_lockTimeField);
+
+
+ if (!kas_PrincipalFieldsSet
+ ((void *)cellHandle, NULL, who, &isAdmin, &grantTickets,
+ &canEncrypt, &canChangePassword, &expirationDate,
+ &maxTicketLifetime, &passwordExpires, &passwordReuse,
+ &failedPasswordAttempts, &failedPasswordLockTime, &ast)) {
+ throwAFSException(env, ast);
+ }
}
- if ( (*env)->GetIntField(env, user, user_rpwSettingField) ==
- org_openafs_jafs_User_REUSE_PASSWORD ) {
- passwordReuse = REUSE_PASSWORD;
- } else {
- passwordReuse = NO_REUSE_PASSWORD;
- }
- expirationDate = (*env)->GetIntField(env, user,
- user_userExpirationField);
- maxTicketLifetime = (*env)->GetIntField(env, user,
- user_maxTicketLifetimeField);
- passwordExpires = (*env)->GetIntField(env, user,
- user_daysToPasswordExpireField);
- failedPasswordAttempts = (*env)->GetIntField(env, user,
- user_failLoginCountField);
- failedPasswordLockTime = (*env)->GetIntField(env, user,
- user_lockTimeField);
-
-
- if ( !kas_PrincipalFieldsSet( (void *) cellHandle, NULL, who, &isAdmin,
- &grantTickets, &canEncrypt,
- &canChangePassword, &expirationDate,
- &maxTicketLifetime, &passwordExpires,
- &passwordReuse, &failedPasswordAttempts,
- &failedPasswordLockTime, &ast ) ) {
- throwAFSException( env, ast );
- }
- }
-
- free( who );
- free( name );
+
+ free(who);
+ free(name);
}
/**
* joldName the name of the user to rename
* jnewName the new name for the user
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_rename
- (JNIEnv *env, jclass cls, jint cellHandle, jstring joldName, jstring jnewName)
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_rename(JNIEnv * env, jclass cls, jint cellHandle,
+ jstring joldName, jstring jnewName)
{
- char *oldName;
- char *newName;
- kas_identity_p whoOld = (kas_identity_p) malloc( sizeof(kas_identity_t) );
- kas_identity_p whoNew = (kas_identity_p) malloc( sizeof(kas_identity_t) );
- kas_principalEntry_t kasEntry;
- pts_UserEntry_t ptsEntry;
- afs_status_t ast;
- int kas;
-
- if ( !whoOld || !whoNew ) {
- if ( whoOld ) {
- free( whoOld );
- }
- if ( whoNew ) {
- free( whoNew );
- }
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( joldName != NULL ) {
- oldName = getNativeString(env, joldName);
- if ( oldName == NULL ) {
- free( whoOld );
- free( whoNew );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- oldName = NULL;
- }
- if ( jnewName != NULL ) {
- newName = getNativeString(env, jnewName);
- if ( newName == NULL ) {
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free ( oldName );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- newName = NULL;
- }
-
- // make sure the names are within the allowed bounds
- if ( (oldName != NULL && strlen( oldName ) > KAS_MAX_NAME_LEN) ||
- (newName != NULL && strlen( newName ) > KAS_MAX_NAME_LEN) )
- {
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- if ( oldName != NULL ) {
- internal_makeKasIdentity( oldName, whoOld );
- }
- if ( newName != NULL ) {
- internal_makeKasIdentity( newName, whoNew );
- }
-
- // retrieve the old kas info
- if ( !kas_PrincipalGet( (void *) cellHandle, NULL, whoOld,
- &kasEntry, &ast ) ) {
- if ( ast != KANOENT ) {
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ast );
- return;
+ char *oldName;
+ char *newName;
+ kas_identity_p whoOld = (kas_identity_p) malloc(sizeof(kas_identity_t));
+ kas_identity_p whoNew = (kas_identity_p) malloc(sizeof(kas_identity_t));
+ kas_principalEntry_t kasEntry;
+ pts_UserEntry_t ptsEntry;
+ afs_status_t ast;
+ int kas;
+
+ if (!whoOld || !whoNew) {
+ if (whoOld) {
+ free(whoOld);
+ }
+ if (whoNew) {
+ free(whoNew);
+ }
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+
+ if (joldName != NULL) {
+ oldName = getNativeString(env, joldName);
+ if (oldName == NULL) {
+ free(whoOld);
+ free(whoNew);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
} else {
- kas = FALSE;
- }
- } else {
- kas = TRUE;
- }
-
- if ( kas ) {
- // create a new kas entry
- // temporarily set the password equal to the new name
- if (!kas_PrincipalCreate( (void *) cellHandle, NULL, whoNew,
- newName, &ast ) ) {
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ast );
- return;
- }
-
- // set the password
- ast = 0;
- // For some reason kas_PrincipalKeySet doesn't set the return code
- // correctly. It always returns 0.
- // So instead of checking the return code, we see if there's an
- // error in the status variable.
- kas_PrincipalKeySet( (void *) cellHandle, NULL, whoNew, 0,
- &(kasEntry.key), &ast );
- if ( ast ) {
- afs_status_t ast_kd;
- kas_PrincipalDelete( (void *) cellHandle, NULL, whoNew, &ast_kd );
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ast );
- return;
- }
- }
-
- // rename the pts entry
- if ( !pts_UserRename( (void *) cellHandle, oldName, newName, &ast ) ) {
- // throw exception if there was no such pts user only if
- // there was also no such kas user
- if ( (ast == ADMPTSFAILEDNAMETRANSLATE && !kas ) ||
- ast != ADMPTSFAILEDNAMETRANSLATE ) {
- afs_status_t ast_kd;
- if ( kas ) {
- kas_PrincipalDelete( (void *) cellHandle, NULL, whoNew, &ast_kd );
- }
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ast );
- return;
- }
- }
-
- if ( kas ) {
- // delete the old kas entry
- if ( !kas_PrincipalDelete( (void *) cellHandle, NULL, whoOld, &ast ) ) {
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
- throwAFSException( env, ast );
- return;
- }
- }
-
- free( whoOld );
- free( whoNew );
- if ( oldName != NULL ) free( oldName );
- if ( newName != NULL ) free( newName );
+ oldName = NULL;
+ }
+ if (jnewName != NULL) {
+ newName = getNativeString(env, jnewName);
+ if (newName == NULL) {
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ newName = NULL;
+ }
+
+ // make sure the names are within the allowed bounds
+ if ((oldName != NULL && strlen(oldName) > KAS_MAX_NAME_LEN)
+ || (newName != NULL && strlen(newName) > KAS_MAX_NAME_LEN)) {
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
+ }
+
+ if (oldName != NULL) {
+ internal_makeKasIdentity(oldName, whoOld);
+ }
+ if (newName != NULL) {
+ internal_makeKasIdentity(newName, whoNew);
+ }
+ // retrieve the old kas info
+ if (!kas_PrincipalGet((void *)cellHandle, NULL, whoOld, &kasEntry, &ast)) {
+ if (ast != KANOENT) {
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ast);
+ return;
+ } else {
+ kas = FALSE;
+ }
+ } else {
+ kas = TRUE;
+ }
+
+ if (kas) {
+ // create a new kas entry
+ // temporarily set the password equal to the new name
+ if (!kas_PrincipalCreate
+ ((void *)cellHandle, NULL, whoNew, newName, &ast)) {
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ast);
+ return;
+ }
+ // set the password
+ ast = 0;
+ // For some reason kas_PrincipalKeySet doesn't set the return code
+ // correctly. It always returns 0.
+ // So instead of checking the return code, we see if there's an
+ // error in the status variable.
+ kas_PrincipalKeySet((void *)cellHandle, NULL, whoNew, 0,
+ &(kasEntry.key), &ast);
+ if (ast) {
+ afs_status_t ast_kd;
+ kas_PrincipalDelete((void *)cellHandle, NULL, whoNew, &ast_kd);
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ast);
+ return;
+ }
+ }
+ // rename the pts entry
+ if (!pts_UserRename((void *)cellHandle, oldName, newName, &ast)) {
+ // throw exception if there was no such pts user only if
+ // there was also no such kas user
+ if ((ast == ADMPTSFAILEDNAMETRANSLATE && !kas)
+ || ast != ADMPTSFAILEDNAMETRANSLATE) {
+ afs_status_t ast_kd;
+ if (kas) {
+ kas_PrincipalDelete((void *)cellHandle, NULL, whoNew,
+ &ast_kd);
+ }
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ast);
+ return;
+ }
+ }
+
+ if (kas) {
+ // delete the old kas entry
+ if (!kas_PrincipalDelete((void *)cellHandle, NULL, whoOld, &ast)) {
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
+ throwAFSException(env, ast);
+ return;
+ }
+ }
+
+ free(whoOld);
+ free(whoNew);
+ if (oldName != NULL)
+ free(oldName);
+ if (newName != NULL)
+ free(newName);
}
/**
* jusername the name of the user for which to set the password
* jnewPassword the new password for the user
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_setPassword
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jusername,
- jstring jnewPassword)
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_setPassword(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jusername,
+ jstring jnewPassword)
{
- afs_status_t ast;
- char *cellName;
- char *username;
- char *newPassword;
- kas_encryptionKey_p newKey =
- (kas_encryptionKey_p) malloc( sizeof(kas_encryptionKey_t) );
- kas_identity_p who = (kas_identity_p) malloc( sizeof(kas_identity_t) );
-
- if ( !who || !newKey ) {
- if ( who ) {
- free( who );
- }
- if ( newKey ) {
- free( newKey );
- }
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( jusername != NULL ) {
- username = getNativeString(env, jusername);
- if ( username == NULL ) {
- free( who );
- free( newKey );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- free( newKey );
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
-
- if ( jnewPassword != NULL ) {
- newPassword = getNativeString(env, jnewPassword);
- if ( newPassword == NULL ) {
- free( who );
- free( newKey );
- free( username );
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
- } else {
- free( who );
- free( newKey );
- free( username );
- throwAFSException( env, JAFSNULLPASS );
- return;
- }
-
- // make sure the name is within the allowed bounds
- if ( strlen( username ) > KAS_MAX_NAME_LEN ) {
- free( who );
- free( newKey );
- free( username );
- free( newPassword );
- throwAFSException( env, ADMPTSUSERNAMETOOLONG );
- return;
- }
-
- if ( !afsclient_CellNameGet( (void *) cellHandle, &cellName, &ast ) ) {
- free( who );
- free( newKey );
- free( username );
- free( newPassword );
- throwAFSException( env, ast );
- return;
- }
-
- if ( !kas_StringToKey( cellName, newPassword, newKey, &ast ) ) {
- free( who );
- free( newKey );
- free( username );
- free( newPassword );
- throwAFSException( env, ast );
- return;
- }
-
- internal_makeKasIdentity( username, who );
-
- ast = 0;
- // For some reason kas_PrincipalKeySet doesn't set the return code correctly.
- // It always returns 0.
- // So instead of checking the return code, we see if there's an error
- // in the status variable.
- kas_PrincipalKeySet( (void *) cellHandle, NULL, who, 0, newKey, &ast );
- if ( ast ) {
- throwAFSException( env, ast );
- }
-
- free( who );
- free( newKey );
- free( username );
- free( newPassword );
+ afs_status_t ast;
+ char *cellName;
+ char *username;
+ char *newPassword;
+ kas_encryptionKey_p newKey =
+ (kas_encryptionKey_p) malloc(sizeof(kas_encryptionKey_t));
+ kas_identity_p who = (kas_identity_p) malloc(sizeof(kas_identity_t));
+
+ if (!who || !newKey) {
+ if (who) {
+ free(who);
+ }
+ if (newKey) {
+ free(newKey);
+ }
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+
+ if (jusername != NULL) {
+ username = getNativeString(env, jusername);
+ if (username == NULL) {
+ free(who);
+ free(newKey);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ free(who);
+ free(newKey);
+ throwAFSException(env, JAFSNULLUSER);
+ return;
+ }
+
+ if (jnewPassword != NULL) {
+ newPassword = getNativeString(env, jnewPassword);
+ if (newPassword == NULL) {
+ free(who);
+ free(newKey);
+ free(username);
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ free(who);
+ free(newKey);
+ free(username);
+ throwAFSException(env, JAFSNULLPASS);
+ return;
+ }
+
+ // make sure the name is within the allowed bounds
+ if (strlen(username) > KAS_MAX_NAME_LEN) {
+ free(who);
+ free(newKey);
+ free(username);
+ free(newPassword);
+ throwAFSException(env, ADMPTSUSERNAMETOOLONG);
+ return;
+ }
+
+ if (!afsclient_CellNameGet((void *)cellHandle, &cellName, &ast)) {
+ free(who);
+ free(newKey);
+ free(username);
+ free(newPassword);
+ throwAFSException(env, ast);
+ return;
+ }
+
+ if (!kas_StringToKey(cellName, newPassword, newKey, &ast)) {
+ free(who);
+ free(newKey);
+ free(username);
+ free(newPassword);
+ throwAFSException(env, ast);
+ return;
+ }
+
+ internal_makeKasIdentity(username, who);
+
+ ast = 0;
+ // For some reason kas_PrincipalKeySet doesn't set the return code correctly.
+ // It always returns 0.
+ // So instead of checking the return code, we see if there's an error
+ // in the status variable.
+ kas_PrincipalKeySet((void *)cellHandle, NULL, who, 0, newKey, &ast);
+ if (ast) {
+ throwAFSException(env, ast);
+ }
+
+ free(who);
+ free(newKey);
+ free(username);
+ free(newPassword);
}
/**
* jname the name of the user for which to get the groups
* returns an iteration ID
*/
-JNIEXPORT jint JNICALL
-Java_org_openafs_jafs_User_getUserGroupsBegin
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jname)
+JNIEXPORT jint JNICALL
+Java_org_openafs_jafs_User_getUserGroupsBegin(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jname)
{
- char *name;
- afs_status_t ast;
- void *iterationId;
-
- if ( jname != NULL ) {
- name = getNativeString(env, jname);
- if ( name == NULL ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
+ char *name;
+ afs_status_t ast;
+ void *iterationId;
+
+ if (jname != NULL) {
+ name = getNativeString(env, jname);
+ if (name == NULL) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+ } else {
+ throwAFSException(env, JAFSNULLUSER);
+ return;
}
- } else {
- throwAFSException( env, JAFSNULLUSER );
- return;
- }
- if ( !pts_UserMemberListBegin( (void *) cellHandle, name, &iterationId,
- &ast ) ) {
- throwAFSException( env, ast );
- }
+ if (!pts_UserMemberListBegin
+ ((void *)cellHandle, name, &iterationId, &ast)) {
+ throwAFSException(env, ast);
+ }
- free( name );
+ free(name);
- return (jint) iterationId;
+ return (jint) iterationId;
}
/**
* iterationId the iteration ID of this iteration
* returns the name of the next group
*/
-JNIEXPORT jstring JNICALL
-Java_org_openafs_jafs_User_getUserGroupsNextString
- (JNIEnv *env, jclass cls, jint iterationId)
+JNIEXPORT jstring JNICALL
+Java_org_openafs_jafs_User_getUserGroupsNextString(JNIEnv * env, jclass cls,
+ jint iterationId)
{
- afs_status_t ast;
- char *groupName = (char *) malloc( sizeof(char)*PTS_MAX_NAME_LEN);
- jstring jgroup;
-
- if ( !groupName ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( !pts_UserMemberListNext( (void *) iterationId, groupName, &ast ) ) {
- free( groupName );
- if ( ast == ADMITERATORDONE ) {
- return NULL;
- } else {
- throwAFSException( env, ast );
- return;
- }
- }
-
- jgroup = (*env)->NewStringUTF(env, groupName);
- free( groupName );
- return jgroup;
+ afs_status_t ast;
+ char *groupName = (char *)malloc(sizeof(char) * PTS_MAX_NAME_LEN);
+ jstring jgroup;
+
+ if (!groupName) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+
+ if (!pts_UserMemberListNext((void *)iterationId, groupName, &ast)) {
+ free(groupName);
+ if (ast == ADMITERATORDONE) {
+ return NULL;
+ } else {
+ throwAFSException(env, ast);
+ return;
+ }
+ }
+
+ jgroup = (*env)->NewStringUTF(env, groupName);
+ free(groupName);
+ return jgroup;
}
/**
* next group
* returns 0 if there are no more users, != 0 otherwise
*/
-JNIEXPORT jint JNICALL
-Java_org_openafs_jafs_User_getUserGroupsNext
- (JNIEnv *env, jclass cls, jint cellHandle, jint iterationId,
- jobject jgroupObject)
+JNIEXPORT jint JNICALL
+Java_org_openafs_jafs_User_getUserGroupsNext(JNIEnv * env, jclass cls,
+ jint cellHandle,
+ jint iterationId,
+ jobject jgroupObject)
{
- afs_status_t ast;
- char *groupName;
- jstring jgroup;
+ afs_status_t ast;
+ char *groupName;
+ jstring jgroup;
- groupName = (char *) malloc( sizeof(char)*PTS_MAX_NAME_LEN);
+ groupName = (char *)malloc(sizeof(char) * PTS_MAX_NAME_LEN);
- if ( !groupName ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
+ if (!groupName) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
- if ( !pts_UserMemberListNext( (void *) iterationId, groupName, &ast ) ) {
- free( groupName );
- if ( ast == ADMITERATORDONE ) {
- return 0;
- } else {
- throwAFSException( env, ast );
- return 0;
+ if (!pts_UserMemberListNext((void *)iterationId, groupName, &ast)) {
+ free(groupName);
+ if (ast == ADMITERATORDONE) {
+ return 0;
+ } else {
+ throwAFSException(env, ast);
+ return 0;
+ }
}
- }
- jgroup = (*env)->NewStringUTF(env, groupName);
+ jgroup = (*env)->NewStringUTF(env, groupName);
- if ( groupCls == 0 ) {
- internal_getGroupClass( env, jgroupObject );
- }
+ if (groupCls == 0) {
+ internal_getGroupClass(env, jgroupObject);
+ }
- (*env)->SetObjectField(env, jgroupObject, group_nameField, jgroup);
+ (*env)->SetObjectField(env, jgroupObject, group_nameField, jgroup);
- getGroupInfoChar( env, (void *) cellHandle, groupName, jgroupObject );
- (*env)->SetBooleanField( env, jgroupObject, group_cachedInfoField, TRUE );
+ getGroupInfoChar(env, (void *)cellHandle, groupName, jgroupObject);
+ (*env)->SetBooleanField(env, jgroupObject, group_cachedInfoField, TRUE);
- free( groupName );
- return 1;
+ free(groupName);
+ return 1;
}
* cls the current Java class
* iterationId the iteration ID of this iteration
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_getUserGroupsDone
- (JNIEnv *env, jclass cls, jint iterationId)
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_getUserGroupsDone(JNIEnv * env, jclass cls,
+ jint iterationId)
{
- afs_status_t ast;
+ afs_status_t ast;
- if ( !pts_UserMemberListDone( (void *) iterationId, &ast ) ) {
- throwAFSException( env, ast );
- return;
- }
+ if (!pts_UserMemberListDone((void *)iterationId, &ast)) {
+ throwAFSException(env, ast);
+ return;
+ }
}
/**
* jname the name of the user for which to get the groups
* returns total number of groups owned by the user
*/
-JNIEXPORT jint JNICALL
-Java_org_openafs_jafs_User_getGroupsOwnedCount
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jname)
+JNIEXPORT jint JNICALL
+Java_org_openafs_jafs_User_getGroupsOwnedCount(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jname)
{
- afs_status_t ast;
- void *iterationId;
- char *groupName;
- int i = 0;
+ afs_status_t ast;
+ void *iterationId;
+ char *groupName;
+ int i = 0;
- iterationId =
- (void *) Java_org_openafs_jafs_User_getGroupsOwnedBegin( env, cls,
- cellHandle,
- jname );
+ iterationId =
+ (void *)Java_org_openafs_jafs_User_getGroupsOwnedBegin(env, cls,
+ cellHandle,
+ jname);
- groupName = (char *) malloc( sizeof(char)*PTS_MAX_NAME_LEN);
+ groupName = (char *)malloc(sizeof(char) * PTS_MAX_NAME_LEN);
- if ( !groupName ) {
- throwAFSException( env, JAFSADMNOMEM );
- return -1;
- }
+ if (!groupName) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return -1;
+ }
- while ( pts_OwnedGroupListNext( (void *) iterationId, groupName, &ast ) )
- i++;
+ while (pts_OwnedGroupListNext((void *)iterationId, groupName, &ast))
+ i++;
- free( groupName );
+ free(groupName);
- if ( ast != ADMITERATORDONE ) {
- throwAFSException( env, ast );
- return -1;
- }
+ if (ast != ADMITERATORDONE) {
+ throwAFSException(env, ast);
+ return -1;
+ }
- return i;
+ return i;
}
/**
* jname the name of the user or group for which to get the groups
* returns an iteration ID
*/
-JNIEXPORT jint JNICALL
-Java_org_openafs_jafs_User_getGroupsOwnedBegin
- (JNIEnv *env, jclass cls, jint cellHandle, jstring jname)
+JNIEXPORT jint JNICALL
+Java_org_openafs_jafs_User_getGroupsOwnedBegin(JNIEnv * env, jclass cls,
+ jint cellHandle, jstring jname)
{
- char *name;
- afs_status_t ast;
- void *iterationId;
-
- if ( jname != NULL ) {
- name = getNativeString(env, jname);
- if ( name == NULL ) {
- throwAFSException( env, JAFSADMNOMEM );
- return -1;
+ char *name;
+ afs_status_t ast;
+ void *iterationId;
+
+ if (jname != NULL) {
+ name = getNativeString(env, jname);
+ if (name == NULL) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return -1;
+ }
+ } else {
+ throwAFSException(env, JAFSNULLUSER);
+ return -1;
}
- } else {
- throwAFSException( env, JAFSNULLUSER );
- return -1;
- }
- if ( !pts_OwnedGroupListBegin( (void *) cellHandle, name,
- &iterationId, &ast ) ) {
- throwAFSException( env, ast );
- }
+ if (!pts_OwnedGroupListBegin
+ ((void *)cellHandle, name, &iterationId, &ast)) {
+ throwAFSException(env, ast);
+ }
- free( name );
+ free(name);
- return (jint) iterationId;
+ return (jint) iterationId;
}
/**
* iterationId the iteration ID of this iteration
* returns the name of the next group
*/
-JNIEXPORT jstring JNICALL
-Java_org_openafs_jafs_User_getGroupsOwnedNextString
- (JNIEnv *env, jclass cls, jint iterationId)
+JNIEXPORT jstring JNICALL
+Java_org_openafs_jafs_User_getGroupsOwnedNextString(JNIEnv * env, jclass cls,
+ jint iterationId)
{
- afs_status_t ast;
- char *groupName = (char *) malloc( sizeof(char)*PTS_MAX_NAME_LEN);
- jstring jgroup;
-
- if ( !groupName ) {
- throwAFSException( env, JAFSADMNOMEM );
- return;
- }
-
- if ( !pts_OwnedGroupListNext( (void *) iterationId, groupName, &ast ) ) {
- free( groupName );
- if ( ast == ADMITERATORDONE ) {
- return NULL;
- } else {
- throwAFSException( env, ast );
- return NULL;
+ afs_status_t ast;
+ char *groupName = (char *)malloc(sizeof(char) * PTS_MAX_NAME_LEN);
+ jstring jgroup;
+
+ if (!groupName) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return;
+ }
+
+ if (!pts_OwnedGroupListNext((void *)iterationId, groupName, &ast)) {
+ free(groupName);
+ if (ast == ADMITERATORDONE) {
+ return NULL;
+ } else {
+ throwAFSException(env, ast);
+ return NULL;
+ }
}
- }
-
- jgroup = (*env)->NewStringUTF(env, groupName);
- free( groupName );
- return jgroup;
+
+ jgroup = (*env)->NewStringUTF(env, groupName);
+ free(groupName);
+ return jgroup;
}
* next group
* returns 0 if there are no more users, != 0 otherwise
*/
-JNIEXPORT jint JNICALL
-Java_org_openafs_jafs_User_getGroupsOwnedNext
- (JNIEnv *env, jclass cls, jint cellHandle, jint iterationId,
- jobject jgroupObject)
+JNIEXPORT jint JNICALL
+Java_org_openafs_jafs_User_getGroupsOwnedNext(JNIEnv * env, jclass cls,
+ jint cellHandle,
+ jint iterationId,
+ jobject jgroupObject)
{
- afs_status_t ast;
- char *groupName;
- jstring jgroup;
+ afs_status_t ast;
+ char *groupName;
+ jstring jgroup;
- groupName = (char *) malloc( sizeof(char)*PTS_MAX_NAME_LEN);
+ groupName = (char *)malloc(sizeof(char) * PTS_MAX_NAME_LEN);
- if ( !groupName ) {
- throwAFSException( env, JAFSADMNOMEM );
- return 0;
- }
+ if (!groupName) {
+ throwAFSException(env, JAFSADMNOMEM);
+ return 0;
+ }
- if ( !pts_OwnedGroupListNext( (void *) iterationId, groupName, &ast ) ) {
- free( groupName );
- if ( ast == ADMITERATORDONE ) {
- return 0;
- } else {
- throwAFSException( env, ast );
- return 0;
+ if (!pts_OwnedGroupListNext((void *)iterationId, groupName, &ast)) {
+ free(groupName);
+ if (ast == ADMITERATORDONE) {
+ return 0;
+ } else {
+ throwAFSException(env, ast);
+ return 0;
+ }
}
- }
- jgroup = (*env)->NewStringUTF(env, groupName);
+ jgroup = (*env)->NewStringUTF(env, groupName);
- if ( groupCls == 0 ) {
- internal_getGroupClass( env, jgroupObject );
- }
+ if (groupCls == 0) {
+ internal_getGroupClass(env, jgroupObject);
+ }
- (*env)->SetObjectField(env, jgroupObject, group_nameField, jgroup);
+ (*env)->SetObjectField(env, jgroupObject, group_nameField, jgroup);
- getGroupInfoChar( env, (void *) cellHandle, groupName, jgroupObject );
- (*env)->SetBooleanField( env, jgroupObject, group_cachedInfoField, TRUE );
+ getGroupInfoChar(env, (void *)cellHandle, groupName, jgroupObject);
+ (*env)->SetBooleanField(env, jgroupObject, group_cachedInfoField, TRUE);
- free( groupName );
- return 1;
+ free(groupName);
+ return 1;
}
* cls the current Java class
* iterationId the iteration ID of this iteration
*/
-JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_getGroupsOwnedDone
- (JNIEnv *env, jclass cls, jint iterationId)
+JNIEXPORT void JNICALL
+Java_org_openafs_jafs_User_getGroupsOwnedDone(JNIEnv * env, jclass cls,
+ jint iterationId)
{
- afs_status_t ast;
+ afs_status_t ast;
- if ( !pts_OwnedGroupListDone( (void *) iterationId, &ast ) ) {
- throwAFSException( env, ast );
- return;
- }
+ if (!pts_OwnedGroupListDone((void *)iterationId, &ast)) {
+ throwAFSException(env, ast);
+ return;
+ }
}
// reclaim global memory being used by this portion
JNIEXPORT void JNICALL
-Java_org_openafs_jafs_User_reclaimUserMemory
- (JNIEnv *env, jclass cls)
+Java_org_openafs_jafs_User_reclaimUserMemory(JNIEnv * env, jclass cls)
{
- if ( userCls ) {
- (*env)->DeleteGlobalRef(env, userCls);
- userCls = 0;
- }
+ if (userCls) {
+ (*env)->DeleteGlobalRef(env, userCls);
+ userCls = 0;
+ }
}