You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cn...@apache.org on 2013/07/10 20:22:06 UTC
svn commit: r1501896 - in /hadoop/common/branches/branch-1-win:
CHANGES.branch-1-win.txt src/native/hadoop.vcxproj
src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c
Author: cnauroth
Date: Wed Jul 10 18:22:05 2013
New Revision: 1501896
URL: http://svn.apache.org/r1501896
Log:
HADOOP-9718. Branch-1-win TestGroupFallback#testGroupWithFallback() failed caused by java.lang.UnsatisfiedLinkError. Contributed by Xi Fang.
Added:
hadoop/common/branches/branch-1-win/src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c
Modified:
hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt
hadoop/common/branches/branch-1-win/src/native/hadoop.vcxproj
Modified: hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt?rev=1501896&r1=1501895&r2=1501896&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt (original)
+++ hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt Wed Jul 10 18:22:05 2013
@@ -301,6 +301,9 @@ Branch-hadoop-1-win (branched from branc
MAPREDUCE-5278. Distributed cache is broken when JT staging dir is not on the
default FS. (Xi Fang via cnauroth)
+ HADOOP-9718. Branch-1-win TestGroupFallback#testGroupWithFallback() failed
+ caused by java.lang.UnsatisfiedLinkError. (Xi Fang via cnauroth)
+
Merged from branch-1
HDFS-385. Backport: Add support for an experimental API that allows a
Modified: hadoop/common/branches/branch-1-win/src/native/hadoop.vcxproj
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/native/hadoop.vcxproj?rev=1501896&r1=1501895&r2=1501896&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/src/native/hadoop.vcxproj (original)
+++ hadoop/common/branches/branch-1-win/src/native/hadoop.vcxproj Wed Jul 10 18:22:05 2013
@@ -119,6 +119,7 @@
<ClCompile Include="src\org\apache\hadoop\io\compress\zlib\ZlibDecompressor.c" Condition="Exists('$(ZLIB_HOME)')" />
<ClCompile Include="src\org\apache\hadoop\io\nativeio\file_descriptor.c" />
<ClCompile Include="src\org\apache\hadoop\io\nativeio\NativeIO.c" />
+ <ClCompile Include="src\org\apache\hadoop\security\JniBasedUnixGroupsMappingWin.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\build\native\$(OS)-$(Platform)\src\org\apache\hadoop\io\nativeio\org_apache_hadoop_io_nativeio_NativeIO.h" />
Added: hadoop/common/branches/branch-1-win/src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c?rev=1501896&view=auto
==============================================================================
--- hadoop/common/branches/branch-1-win/src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c (added)
+++ hadoop/common/branches/branch-1-win/src/native/src/org/apache/hadoop/security/JniBasedUnixGroupsMappingWin.c Wed Jul 10 18:22:05 2013
@@ -0,0 +1,130 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <jni.h>
+#include "org_apache_hadoop.h"
+
+#include <assert.h>
+#include <Windows.h>
+#include "winutils.h"
+
+static jobjectArray emptyGroups = NULL;
+
+/*
+ * Throw a java.IO.IOException, generating the message from errno.
+ */
+static void throw_ioexception(JNIEnv* env, DWORD errnum)
+{
+ DWORD len = 0;
+ LPSTR buffer = NULL;
+ const char* message = NULL;
+
+ len = FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL, *(DWORD*) (&errnum), // reinterpret cast
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPSTR*)&buffer, 0, NULL);
+
+ if (len > 0)
+ {
+ message = buffer;
+ }
+ else
+ {
+ message = "Unknown error.";
+ }
+
+ THROW(env, "java/io/IOException", message);
+
+ LocalFree(buffer);
+
+ return;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_apache_hadoop_security_JniBasedUnixGroupsMapping_getGroupForUser
+(JNIEnv *env, jobject jobj, jstring juser) {
+ const WCHAR *user = NULL;
+ jobjectArray jgroups = NULL;
+ DWORD dwRtnCode = ERROR_SUCCESS;
+
+ LPLOCALGROUP_USERS_INFO_0 groups = NULL;
+ LPLOCALGROUP_USERS_INFO_0 tmpGroups = NULL;
+ DWORD ngroups = 0;
+
+ int i;
+
+ if (emptyGroups == NULL) {
+ jobjectArray lEmptyGroups = (jobjectArray)(*env)->NewObjectArray(env, 0,
+ (*env)->FindClass(env, "java/lang/String"), NULL);
+ if (lEmptyGroups == NULL) {
+ goto cleanup;
+ }
+ emptyGroups = (*env)->NewGlobalRef(env, lEmptyGroups);
+ if (emptyGroups == NULL) {
+ goto cleanup;
+ }
+ }
+ user = (*env)->GetStringChars(env, juser, NULL);
+ if (user == NULL) {
+ THROW(env, "java/lang/OutOfMemoryError", "Couldn't allocate memory for user buffer");
+ goto cleanup;
+ }
+
+ dwRtnCode = GetLocalGroupsForUser(user, &groups, &ngroups);
+ if (dwRtnCode != ERROR_SUCCESS) {
+ throw_ioexception(env, dwRtnCode);
+ goto cleanup;
+ }
+
+ jgroups = (jobjectArray)(*env)->NewObjectArray(env, ngroups,
+ (*env)->FindClass(env, "java/lang/String"), NULL);
+ if (jgroups == NULL) {
+ THROW(env, "java/lang/OutOfMemoryError", "Couldn't allocate memory for group buffer");
+ goto cleanup;
+ }
+
+ // use a tmp pointer to iterate over groups and keep the original pointer
+ // for memory deallocation
+ tmpGroups = groups;
+
+ // fill the output string array
+ for (i = 0; i < ngroups; i++) {
+ jsize groupStringLen = (jsize)wcslen(tmpGroups->lgrui0_name);
+ jstring jgrp = (*env)->NewString(env, tmpGroups->lgrui0_name, groupStringLen);
+ if (jgrp == NULL) {
+ THROW(env, "java/lang/OutOfMemoryError", "Couldn't allocate memory for groups buffer");
+ goto cleanup;
+ }
+ (*env)->SetObjectArrayElement(env, jgroups, i, jgrp);
+ // move on to the next group
+ tmpGroups++;
+ }
+
+cleanup:
+ if (groups != NULL) NetApiBufferFree(groups);
+
+ if (user != NULL) {
+ (*env)->ReleaseStringChars(env, juser, user);
+ }
+
+ if (dwRtnCode == ERROR_SUCCESS) {
+ return jgroups;
+ } else {
+ return emptyGroups;
+ }
+}