projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Initial set of Ward sgen annotations (#5705)
[mono.git]
/
mono
/
metadata
/
mono-security.c
diff --git
a/mono/metadata/mono-security.c
b/mono/metadata/mono-security.c
index 0d770f70cdc0906290840eeb398892843cfcdfb4..e3b82bcd61120cd411065aa34771a9879abe8d0b 100644
(file)
--- a/
mono/metadata/mono-security.c
+++ b/
mono/metadata/mono-security.c
@@
-1,5
+1,6
@@
-/*
- * security.c: Security internal calls
+/**
+ * \file
+ * Security internal calls
*
* Author:
* Sebastien Pouliot <sebastien@ximian.com>
*
* Author:
* Sebastien Pouliot <sebastien@ximian.com>
@@
-12,7
+13,7
@@
#include <config.h>
#endif
#include <config.h>
#endif
-#include <mono/metadata/assembly.h>
+#include <mono/metadata/assembly
-internals
.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/image.h>
#include <mono/metadata/exception.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/image.h>
#include <mono/metadata/exception.h>
@@
-76,6
+77,8
@@
GetTokenName (uid_t uid)
{
gchar *uname = NULL;
{
gchar *uname = NULL;
+#ifdef HAVE_PWD_H
+
#ifdef HAVE_GETPWUID_R
struct passwd pwd;
size_t fbufsize;
#ifdef HAVE_GETPWUID_R
struct passwd pwd;
size_t fbufsize;
@@
-108,9
+111,13
@@
GetTokenName (uid_t uid)
g_free (fbuf);
#endif
g_free (fbuf);
#endif
+#endif /* HAVE_PWD_H */
+
return uname;
}
return uname;
}
+#ifdef HAVE_GRP_H
+
static gboolean
IsMemberInList (uid_t user, struct group *g)
{
static gboolean
IsMemberInList (uid_t user, struct group *g)
{
@@
-137,9
+144,15
@@
IsMemberInList (uid_t user, struct group *g)
return result;
}
return result;
}
+#endif /* HAVE_GRP_H */
+
static gboolean
IsDefaultGroup (uid_t user, gid_t group)
{
static gboolean
IsDefaultGroup (uid_t user, gid_t group)
{
+ gboolean result = FALSE;
+
+#ifdef HAVE_PWD_H
+
#ifdef HAVE_GETPWUID_R
struct passwd pwd;
size_t fbufsize;
#ifdef HAVE_GETPWUID_R
struct passwd pwd;
size_t fbufsize;
@@
-147,7
+160,6
@@
IsDefaultGroup (uid_t user, gid_t group)
gint32 retval;
#endif
struct passwd *p = NULL;
gint32 retval;
#endif
struct passwd *p = NULL;
- gboolean result;
#ifdef HAVE_GETPWUID_R
#ifdef _SC_GETPW_R_SIZE_MAX
#ifdef HAVE_GETPWUID_R
#ifdef _SC_GETPW_R_SIZE_MAX
@@
-173,9
+185,13
@@
IsDefaultGroup (uid_t user, gid_t group)
g_free (fbuf);
#endif
g_free (fbuf);
#endif
+#endif /* HAVE_PWD_H */
+
return result;
}
return result;
}
+#ifdef HAVE_GRP_H
+
static gboolean
IsMemberOf (gid_t user, struct group *g)
{
static gboolean
IsMemberOf (gid_t user, struct group *g)
{
@@
-189,6
+205,9
@@
IsMemberOf (gid_t user, struct group *g)
/* is the user in the group list */
return IsMemberInList (user, g);
}
/* is the user in the group list */
return IsMemberInList (user, g);
}
+
+#endif /* HAVE_GRP_H */
+
#endif /* !HOST_WIN32 */
/* ICALLS */
#endif /* !HOST_WIN32 */
/* ICALLS */
@@
-197,11
+216,18
@@
IsMemberOf (gid_t user, struct group *g)
#ifndef HOST_WIN32
gpointer
#ifndef HOST_WIN32
gpointer
-
ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void
)
+
mono_security_principal_windows_identity_get_current_token (
)
{
return GINT_TO_POINTER (geteuid ());
}
{
return GINT_TO_POINTER (geteuid ());
}
+gpointer
+ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (MonoError *error)
+{
+ error_init (error);
+ return mono_security_principal_windows_identity_get_current_token ();
+}
+
static gint32
internal_get_token_name (gpointer token, gunichar2 ** uniname)
{
static gint32
internal_get_token_name (gpointer token, gunichar2 ** uniname)
{
@@
-218,48
+244,51
@@
internal_get_token_name (gpointer token, gunichar2 ** uniname)
return size;
}
return size;
}
-MonoString
*
-ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token)
+MonoString
Handle
+ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token
, MonoError *error
)
{
{
- MonoError error;
- MonoString *result = NULL;
+ MonoStringHandle result;
gunichar2 *uniname = NULL;
gint32 size = 0;
gunichar2 *uniname = NULL;
gint32 size = 0;
- error_init (
&
error);
+ error_init (error);
size = internal_get_token_name (token, &uniname);
if (size > 0) {
size = internal_get_token_name (token, &uniname);
if (size > 0) {
- result = mono_string_new_utf16_
checked (mono_domain_get (), uniname, size, &
error);
+ result = mono_string_new_utf16_
handle (mono_domain_get (), uniname, size,
error);
}
else
}
else
- result = mono_string_new
(mono_domain_get (), ""
);
+ result = mono_string_new
_handle (mono_domain_get (), "", error
);
if (uniname)
g_free (uniname);
if (uniname)
g_free (uniname);
- mono_error_set_pending_exception (&error);
return result;
}
#endif /* !HOST_WIN32 */
#ifndef HOST_WIN32
gpointer
return result;
}
#endif /* !HOST_WIN32 */
#ifndef HOST_WIN32
gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString
*username
)
+ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString
Handle username, MonoError *error
)
{
{
+ gpointer token = (gpointer)-2;
+
+ error_init (error);
+#ifdef HAVE_PWD_H
+
#ifdef HAVE_GETPWNAM_R
struct passwd pwd;
size_t fbufsize;
gchar *fbuf;
gint32 retval;
#endif
#ifdef HAVE_GETPWNAM_R
struct passwd pwd;
size_t fbufsize;
gchar *fbuf;
gint32 retval;
#endif
- gpointer token = (gpointer) -2;
struct passwd *p;
gchar *utf8_name;
gboolean result;
struct passwd *p;
gchar *utf8_name;
gboolean result;
- utf8_name = mono_unicode_to_external (mono_string_chars (username));
+ utf8_name = mono_string_handle_to_utf8 (username, error);
+ return_val_if_nok (error, NULL);
#ifdef HAVE_GETPWNAM_R
#ifdef _SC_GETPW_R_SIZE_MAX
#ifdef HAVE_GETPWNAM_R
#ifdef _SC_GETPW_R_SIZE_MAX
@@
-286,6
+315,8
@@
ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *us
#endif
g_free (utf8_name);
#endif
g_free (utf8_name);
+#endif /* HAVE_PWD_H */
+
return token;
}
#endif /* HOST_WIN32 */
return token;
}
#endif /* HOST_WIN32 */
@@
-382,6
+413,8
@@
ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupId (gpointer
{
gboolean result = FALSE;
{
gboolean result = FALSE;
+#ifdef HAVE_GRP_H
+
#ifdef HAVE_GETGRGID_R
struct group grp;
size_t fbufsize;
#ifdef HAVE_GETGRGID_R
struct group grp;
size_t fbufsize;
@@
-413,6
+446,8
@@
ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupId (gpointer
g_free (fbuf);
#endif
g_free (fbuf);
#endif
+#endif /* HAVE_GRP_H */
+
return result;
}
return result;
}
@@
-420,6
+455,9
@@
gboolean
ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupName (gpointer user, MonoString *group)
{
gboolean result = FALSE;
ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupName (gpointer user, MonoString *group)
{
gboolean result = FALSE;
+
+#ifdef HAVE_GRP_H
+
gchar *utf8_groupname;
utf8_groupname = mono_unicode_to_external (mono_string_chars (group));
gchar *utf8_groupname;
utf8_groupname = mono_unicode_to_external (mono_string_chars (group));
@@
-453,6
+491,8
@@
ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupName (gpoint
g_free (utf8_groupname);
}
g_free (utf8_groupname);
}
+#endif /* HAVE_GRP_H */
+
return result;
}
#endif /* !HOST_WIN32 */
return result;
}
#endif /* !HOST_WIN32 */
@@
-592,7
+632,7
@@
void invoke_protected_memory_method (MonoArray *data, MonoObject *scope, gboolea
if (system_security_assembly == NULL) {
system_security_assembly = mono_image_loaded ("System.Security");
if (!system_security_assembly) {
if (system_security_assembly == NULL) {
system_security_assembly = mono_image_loaded ("System.Security");
if (!system_security_assembly) {
- MonoAssembly *sa = mono_assembly_open
("System.Security.dll"
, NULL);
+ MonoAssembly *sa = mono_assembly_open
_predicate ("System.Security.dll", FALSE, FALSE, NULL, NULL
, NULL);
if (!sa)
g_assert_not_reached ();
system_security_assembly = mono_assembly_get_image (sa);
if (!sa)
g_assert_not_reached ();
system_security_assembly = mono_assembly_get_image (sa);