You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/09/07 13:26:58 UTC

svn commit: r812087 - in /commons/sandbox/runtime/trunk/src/main/native: include/acr_error.h os/unix/group.c os/unix/user.c os/win32/group.c os/win32/user.c os/win32/wusec.c

Author: mturk
Date: Mon Sep  7 11:26:57 2009
New Revision: 812087

URL: http://svn.apache.org/viewvc?rev=812087&view=rev
Log:
Throw OS exception instead IO exception for users and groups

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
    commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/wusec.c

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h Mon Sep  7 11:26:57 2009
@@ -134,6 +134,25 @@
         ACR_SET_OS_ERROR(_se);                                              \
     } else _E = _E
 
+#define ACR_THROW_OS_IF_ERR(S)                                              \
+    if ((S) && IS_VALID_HANDLE(_E)) {                                       \
+        if (ACR_STATUS_IS_EACCES((S)))                                      \
+            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, (S));     \
+        else                                                                \
+            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, (S));         \
+        ACR_SET_OS_ERROR((S));                                              \
+    } else _E = _E
+
+#define ACR_THROW_OS_ERRNO()                                                \
+    if (IS_VALID_HANDLE(_E)) {                                              \
+        int _se = ACR_GET_OS_ERROR();                                       \
+        if (ACR_STATUS_IS_EACCES(_se))                                      \
+            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, _se);     \
+        else                                                                \
+            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, _se);         \
+        ACR_SET_OS_ERROR(_se);                                              \
+    } else _E = _E
+
 /*
  * Convenience function to help throw any class
  * @param env JNI Environment

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c Mon Sep  7 11:26:57 2009
@@ -106,7 +106,7 @@
     if (rc) {
         rc = ACR_GET_OS_ERROR();
         if (ACR_STATUS_IS_ENOENT(rc)) {
-            ACR_THROW_IO_IF_ERR(rc);
+            ACR_THROW_OS_IF_ERR(rc);
         }
         return NULL;
     }
@@ -148,7 +148,7 @@
     if (rc) {
         rc = ACR_GET_OS_ERROR();
         if (ACR_STATUS_IS_ENOENT(rc)) {
-            ACR_THROW_IO_IF_ERR(rc);
+            ACR_THROW_OS_IF_ERR(rc);
         }
         return NULL;
     }
@@ -254,7 +254,7 @@
     if (rc) {
         rc = ACR_GET_OS_ERROR();
         if (ACR_STATUS_IS_ENOENT(rc)) {
-            ACR_THROW_IO_IF_ERR(rc);
+            ACR_THROW_OS_IF_ERR(rc);
         }
         return NULL;
     }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c Mon Sep  7 11:26:57 2009
@@ -121,7 +121,7 @@
     if (rc) {
         rc = ACR_GET_OS_ERROR();
         if (ACR_STATUS_IS_ENOENT(rc)) {
-            ACR_THROW_IO_IF_ERR(rc);
+            ACR_THROW_OS_IF_ERR(rc);
         }
         return NULL;
     }
@@ -168,7 +168,7 @@
     if (rc) {
         rc = ACR_GET_OS_ERROR();
         if (ACR_STATUS_IS_ENOENT(rc)) {
-            ACR_THROW_IO_IF_ERR(rc);
+            ACR_THROW_OS_IF_ERR(rc);
         }
         return NULL;
     }
@@ -265,7 +265,7 @@
         errno = 0;
         ut = getutxent();
         if (ut == NULL && n == 0) {
-            ACR_THROW_IO_ERRNO();
+            ACR_THROW_OS_ERRNO();
             return NULL;
         }
         if (ut == NULL)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c Mon Sep  7 11:26:57 2009
@@ -109,7 +109,6 @@
 {
     jobject grp;
     jobject gid;
-    int err;
     DWORD rc;
     SID_NAME_USE sidtype;
     PSID  sid;
@@ -118,12 +117,9 @@
 
     sid =  ACR_GetSidFromAccountName(name, &sidtype);
     if (!sid) {
-        err = ACR_GET_OS_ERROR();
-        if  (ACR_STATUS_IS_EACCES(err))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else if (ACR_TO_OS_ERROR(err) != ERROR_NONE_MAPPED)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, err);
-
+        if ((rc = GetLastError()) != ERROR_NONE_MAPPED) {
+            ACR_THROW_OS_IF_ERR((ACR_TO_OS_ERROR(rc));
+        }
         return NULL;
     }
     if (sidtype != SidTypeGroup && sidtype != SidTypeAlias &&
@@ -183,13 +179,13 @@
     if (!(sid = ACR_Malloc(_E, THROW_FMARK, len)))
         return NULL;
     if (!CopySid(len, sid, id)) {
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, ACR_GET_OS_ERROR());
+        ACR_THROW_OS_ERRNO();
         free(sid);
         return NULL;
     }
     sidtype = ACR_GetAccountNameFromSid(name, MAX_PATH, sid);
     if (sidtype == -1) {
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, ACR_GET_OS_ERROR());
+        ACR_THROW_OS_ERRNO();
         free(sid);
         return NULL;
     }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c Mon Sep  7 11:26:57 2009
@@ -122,7 +122,6 @@
 {
     jobject usr;
     jobject uid;
-    int err;
     DWORD rc;
     SID_NAME_USE sidtype;
     PSID  sid;
@@ -132,12 +131,9 @@
 
     sid =  ACR_GetSidFromAccountName(name, &sidtype);
     if (!sid) {
-        err = ACR_GET_OS_ERROR();
-        if  (ACR_STATUS_IS_EACCES(err))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else if (ACR_TO_OS_ERROR(err) != ERROR_NONE_MAPPED)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, err);
-
+        if ((rc = GetLastError()) != ERROR_NONE_MAPPED) {
+            ACR_THROW_OS_IF_ERR((ACR_TO_OS_ERROR(rc));
+        }
         /* TODO: Throw exception */
         return NULL;
     }
@@ -182,8 +178,7 @@
     }
     else {
         ACR_DescriptorCleanup(_E, uid);
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                           ACR_FROM_OS_ERROR(rc));
+        ACR_THROW_OS_IF_ERR(ACR_FROM_OS_ERROR(rc));
         return NULL;
     }
     if (ConvertSidToStringSidW(sid, &ssid)) {
@@ -211,13 +206,13 @@
     if (!(sid = ACR_Malloc(_E, THROW_FMARK, len)))
         return NULL;
     if (!CopySid(len, sid, id)) {
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, ACR_GET_OS_ERROR());
+        ACR_THROW_OS_ERRNO();
         free(sid);
         return NULL;
     }
     sidtype = ACR_GetAccountNameFromSid(name, MAX_PATH, sid);
     if (sidtype == -1) {
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, ACR_GET_OS_ERROR());
+        ACR_THROW_OS_ERRNO();
         free(sid);
         return NULL;
     }
@@ -261,8 +256,7 @@
     }
     else {
         ACR_DescriptorCleanup(_E, uid);
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                           ACR_FROM_OS_ERROR(rc));
+        ACR_THROW_OS_IF_ERR(ACR_FROM_OS_ERROR(rc));
         return NULL;
     }
     if (ConvertSidToStringSidW(sid, &ssid)) {

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/wusec.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/wusec.c?rev=812087&r1=812086&r2=812087&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/wusec.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/wusec.c Mon Sep  7 11:26:57 2009
@@ -98,11 +98,12 @@
     GetTokenInformation(h, ic, NULL, sz, &sz);
     if ((rc = GetLastError()) != ERROR_INSUFFICIENT_BUFFER) {
         if(_E) {
-            if (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
+            rc = ACR_FROM_OS_ERROR(rc);
+            if (ACR_STATUS_IS_EACCES(rc))
                 ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
             else if (rc != NERR_UserNotFound && rc != NERR_GroupNotFound)
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                   ACR_FROM_OS_ERROR(rc));
+                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, rc);
+            ACR_SET_OS_ERROR(rc);
         }
         return NULL;
     }
@@ -110,11 +111,12 @@
         return NULL;
     }
     if (!GetTokenInformation(h, ic, rv, sz, &sz)) {
+        rc = ACR_GET_OS_ERROR();
         if(_E) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                               ACR_GET_OS_ERROR());
+            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR, rc);
         }
         free(rv);
+        ACR_SET_OS_ERROR(rc);
         rv = NULL;
     }
     return rv;