Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2004-02-05 20:23:19 +0300
committerCorinna Vinschen <corinna@vinschen.de>2004-02-05 20:23:19 +0300
commitd82c6f474d1126cdd7d298991610fa23823dd99f (patch)
tree617e6fefbae53c368edbdcb131571c50e5e7877e /winsup/cygwin
parent0d902e61d123e5c3b04a6892b7dfccb82e2a7111 (diff)
* security.h (SID): New macro.
(well_known_*_sid): Change type to cygpsid. (cygsid::init): Delete declaration. * sec_helper.cc (well_known_*_sid): Define using above SID macro. (cygsid::init): Delete. * dcrt0.cc (dll_crt0_0): Do not call cygsid::init. * security.cc (get_user_local_groups): Change the second argument type to cygpsid.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog11
-rw-r--r--winsup/cygwin/dcrt0.cc2
-rw-r--r--winsup/cygwin/sec_helper.cc58
-rw-r--r--winsup/cygwin/security.cc2
-rw-r--r--winsup/cygwin/security.h37
5 files changed, 62 insertions, 48 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 7a92df734..a40eb0192 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,14 @@
+2004-02-05 Pierre Humblet <pierre.humblet@ieee.org>
+
+ * security.h (SID): New macro.
+ (well_known_*_sid): Change type to cygpsid.
+ (cygsid::init): Delete declaration.
+ * sec_helper.cc (well_known_*_sid): Define using above SID macro.
+ (cygsid::init): Delete.
+ * dcrt0.cc (dll_crt0_0): Do not call cygsid::init.
+ * security.cc (get_user_local_groups): Change the second argument type
+ to cygpsid.
+
2004-02-03 Christopher Faylor <cgf@redhat.com>
* cygtls.h (_local_storage::signamebuf): Increase size to prevent
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index a53a27cd1..f1df888b2 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -723,8 +723,6 @@ dll_crt0_0 ()
/* Initialize events */
events_init ();
- /* Init global well known SID objects */
- cygsid::init ();
cygheap->cwd.init ();
}
diff --git a/winsup/cygwin/sec_helper.cc b/winsup/cygwin/sec_helper.cc
index 9683a5aa4..7888c161e 100644
--- a/winsup/cygwin/sec_helper.cc
+++ b/winsup/cygwin/sec_helper.cc
@@ -47,19 +47,33 @@ SID_IDENTIFIER_AUTHORITY NO_COPY sid_auth[] = {
{SECURITY_NT_AUTHORITY}
};
-cygsid well_known_null_sid;
-cygsid well_known_world_sid;
-cygsid well_known_local_sid;
-cygsid well_known_creator_owner_sid;
-cygsid well_known_creator_group_sid;
-cygsid well_known_dialup_sid;
-cygsid well_known_network_sid;
-cygsid well_known_batch_sid;
-cygsid well_known_interactive_sid;
-cygsid well_known_service_sid;
-cygsid well_known_authenticated_users_sid;
-cygsid well_known_system_sid;
-cygsid well_known_admins_sid;
+SID (well_known_null_sid, "S-1-0-0",
+ SECURITY_NULL_SID_AUTHORITY, 1, SECURITY_NULL_RID);
+SID (well_known_world_sid, "S-1-1-0",
+ SECURITY_WORLD_SID_AUTHORITY, 1, SECURITY_WORLD_RID);
+SID (well_known_local_sid, "S-1-2-0",
+ SECURITY_LOCAL_SID_AUTHORITY, 1, SECURITY_LOCAL_RID);
+SID (well_known_creator_owner_sid, "S-1-3-0",
+ SECURITY_CREATOR_SID_AUTHORITY, 1, SECURITY_CREATOR_OWNER_RID);
+SID (well_known_creator_group_sid, "S-1-3-1",
+ SECURITY_CREATOR_SID_AUTHORITY, 1, SECURITY_CREATOR_GROUP_RID);
+SID (well_known_dialup_sid, "S-1-5-1",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_DIALUP_RID);
+SID (well_known_network_sid, "S-1-5-2",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_NETWORK_RID);
+SID (well_known_batch_sid, "S-1-5-3",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_BATCH_RID);
+SID (well_known_interactive_sid, "S-1-5-4",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_INTERACTIVE_RID);
+SID (well_known_service_sid, "S-1-5-6",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_SERVICE_RID);
+SID (well_known_authenticated_users_sid, "S-1-5-11",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_AUTHENTICATED_USER_RID);
+SID (well_known_system_sid, "S-1-5-18",
+ SECURITY_NT_AUTHORITY, 1, SECURITY_LOCAL_SYSTEM_RID);
+SID (well_known_admins_sid, "S-1-5-32-544",
+ SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS);
bool
cygpsid::operator== (const char *nsidstr) const
@@ -118,24 +132,6 @@ cygpsid::string (char *nsidstr) const
return nsidstr;
}
-void
-cygsid::init ()
-{
- well_known_null_sid = "S-1-0-0";
- well_known_world_sid = "S-1-1-0";
- well_known_local_sid = "S-1-2-0";
- well_known_creator_owner_sid = "S-1-3-0";
- well_known_creator_group_sid = "S-1-3-1";
- well_known_dialup_sid = "S-1-5-1";
- well_known_network_sid = "S-1-5-2";
- well_known_batch_sid = "S-1-5-3";
- well_known_interactive_sid = "S-1-5-4";
- well_known_service_sid = "S-1-5-6";
- well_known_authenticated_users_sid = "S-1-5-11";
- well_known_system_sid = "S-1-5-18";
- well_known_admins_sid = "S-1-5-32-544";
-}
-
PSID
cygsid::get_sid (DWORD s, DWORD cnt, DWORD *r)
{
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index 1c34052fd..66052acec 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -425,7 +425,7 @@ get_user_local_groups (cygsidlist &grp_list, PSID pusersid)
}
static bool
-sid_in_token_groups (PTOKEN_GROUPS grps, cygsid &sid)
+sid_in_token_groups (PTOKEN_GROUPS grps, cygpsid sid)
{
if (!grps)
return false;
diff --git a/winsup/cygwin/security.h b/winsup/cygwin/security.h
index 8e958ba00..ac1a66461 100644
--- a/winsup/cygwin/security.h
+++ b/winsup/cygwin/security.h
@@ -23,6 +23,16 @@ details. */
#define ACL_DEFAULT_SIZE 3072
#define NO_SID ((PSID)NULL)
+/* Macro to define variable length SID structures */
+#define SID(name, comment, authority, count, rid...) \
+static NO_COPY struct { \
+ BYTE Revision; \
+ BYTE SubAuthorityCount; \
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority; \
+ DWORD SubAuthority[count]; \
+} name##_struct = { SID_REVISION, count, {authority}, {rid}}; \
+cygpsid NO_COPY name = (PSID) &name##_struct;
+
#define FILE_READ_BITS (FILE_READ_DATA | GENERIC_READ | GENERIC_ALL)
#define FILE_WRITE_BITS (FILE_WRITE_DATA | GENERIC_WRITE | GENERIC_ALL)
#define FILE_EXEC_BITS (FILE_EXECUTE | GENERIC_EXECUTE | GENERIC_ALL)
@@ -79,7 +89,6 @@ class cygsid : public cygpsid {
}
public:
- static void init();
inline operator const PSID () { return psid; }
inline const PSID operator= (cygsid &nsid)
@@ -213,19 +222,19 @@ public:
}
};
-extern cygsid well_known_null_sid;
-extern cygsid well_known_world_sid;
-extern cygsid well_known_local_sid;
-extern cygsid well_known_creator_owner_sid;
-extern cygsid well_known_creator_group_sid;
-extern cygsid well_known_dialup_sid;
-extern cygsid well_known_network_sid;
-extern cygsid well_known_batch_sid;
-extern cygsid well_known_interactive_sid;
-extern cygsid well_known_service_sid;
-extern cygsid well_known_authenticated_users_sid;
-extern cygsid well_known_system_sid;
-extern cygsid well_known_admins_sid;
+extern cygpsid well_known_null_sid;
+extern cygpsid well_known_world_sid;
+extern cygpsid well_known_local_sid;
+extern cygpsid well_known_creator_owner_sid;
+extern cygpsid well_known_creator_group_sid;
+extern cygpsid well_known_dialup_sid;
+extern cygpsid well_known_network_sid;
+extern cygpsid well_known_batch_sid;
+extern cygpsid well_known_interactive_sid;
+extern cygpsid well_known_service_sid;
+extern cygpsid well_known_authenticated_users_sid;
+extern cygpsid well_known_system_sid;
+extern cygpsid well_known_admins_sid;
inline BOOL
legal_sid_type (SID_NAME_USE type)