27#define STRSAFE_NO_DEPRECATE
29#include "dbus-sysdeps.h"
30#include "dbus-internals.h"
31#include "dbus-protocol.h"
32#include "dbus-string.h"
33#include "dbus-sysdeps.h"
34#include "dbus-sysdeps-win.h"
35#include "dbus-sockets-win.h"
36#include "dbus-memory.h"
69 "Cannot daemonize on Windows");
82_dbus_write_pid_file (
const DBusString *filename,
86 const char *cfilename;
92 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
94 cfilename = _dbus_string_get_const_data (filename);
96 hnd = CreateFileA (cfilename, GENERIC_WRITE,
97 FILE_SHARE_READ | FILE_SHARE_WRITE,
98 NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
99 INVALID_HANDLE_VALUE);
100 if (hnd == INVALID_HANDLE_VALUE)
102 char *emsg = _dbus_win_error_string (GetLastError ());
104 "Could not create PID file %s: %s",
106 _dbus_win_free_error_string (emsg);
110 if (snprintf (pidstr,
sizeof (pidstr),
"%lu\n", pid) < 0)
113 "Failed to format PID for \"%s\": %s", cfilename,
120 bytes_to_write = strlen (pidstr);;
122 while (total < bytes_to_write)
127 res = WriteFile (hnd, pidstr + total, bytes_to_write - total,
128 &bytes_written,
NULL);
130 if (res == 0 || bytes_written <= 0)
132 char *emsg = _dbus_win_error_string (GetLastError ());
134 "Could not write to %s: %s", cfilename, emsg);
135 _dbus_win_free_error_string (emsg);
140 total += bytes_written;
143 if (CloseHandle (hnd) == 0)
145 char *emsg = _dbus_win_error_string (GetLastError ());
147 "Could not close file %s: %s",
149 _dbus_win_free_error_string (emsg);
176 _dbus_verbose (
"writing pid file %s\n", _dbus_string_get_const_data (pidfile));
177 if (!_dbus_write_pid_file (pidfile,
181 _dbus_verbose (
"pid file write failed\n");
182 _DBUS_ASSERT_ERROR_IS_SET(error);
188 _dbus_verbose (
"No pid file requested\n");
191 if (print_pid_pipe !=
NULL && _dbus_pipe_is_valid (print_pid_pipe))
196 _dbus_verbose (
"writing our pid to pipe %d\n", print_pid_pipe->fd);
200 _DBUS_SET_OOM (error);
208 _DBUS_SET_OOM (error);
212 bytes = _dbus_string_get_length (&pid);
213 if (_dbus_pipe_write (print_pid_pipe, &pid, 0, bytes, error) != bytes)
219 "Printing message bus PID: did not write enough bytes\n");
229 _dbus_verbose (
"No pid pipe to write to\n");
265 "cannot change fd limit on this platform");
269_dbus_rlimit_save_fd_limit (
DBusError *error)
271 fd_limit_not_supported (error);
276_dbus_rlimit_raise_fd_limit (
DBusError *error)
278 fd_limit_not_supported (error);
283_dbus_rlimit_restore_fd_limit (DBusRLimit *saved,
286 fd_limit_not_supported (error);
291_dbus_rlimit_free (DBusRLimit *lim)
311 const char *filename_c;
312 WIN32_FILE_ATTRIBUTE_DATA wfad;
315 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
317 filename_c = _dbus_string_get_const_data (filename);
319 if (!GetFileAttributesExA (filename_c, GetFileExInfoStandard, &wfad))
321 _dbus_win_set_error_from_win_error (error, GetLastError ());
325 if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
326 statbuf->
mode = _S_IFDIR;
328 statbuf->
mode = _S_IFREG;
330 statbuf->
mode |= _S_IREAD;
331 if (wfad.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
332 statbuf->
mode |= _S_IWRITE;
334 lastdot = strrchr (filename_c,
'.');
335 if (lastdot && stricmp (lastdot,
".exe") == 0)
336 statbuf->
mode |= _S_IEXEC;
338 statbuf->
mode |= (statbuf->
mode & 0700) >> 3;
339 statbuf->
mode |= (statbuf->
mode & 0700) >> 6;
343#ifdef ENABLE_UID_TO_SID
345 PSID owner_sid, group_sid;
346 PSECURITY_DESCRIPTOR sd;
349 rc = GetNamedSecurityInfo ((
char *) filename_c, SE_FILE_OBJECT,
350 OWNER_SECURITY_INFORMATION |
351 GROUP_SECURITY_INFORMATION,
352 &owner_sid, &group_sid,
355 if (rc != ERROR_SUCCESS)
357 _dbus_win_set_error_from_win_error (error, rc);
364 statbuf->
uid = _dbus_win_sid_to_uid_t (owner_sid);
365 statbuf->
gid = _dbus_win_sid_to_uid_t (group_sid);
374 statbuf->
size = ((dbus_int64_t) wfad.nFileSizeHigh << 32) + wfad.nFileSizeLow;
377 (((dbus_int64_t) wfad.ftLastAccessTime.dwHighDateTime << 32) +
378 wfad.ftLastAccessTime.dwLowDateTime) / 10000000 - DBUS_INT64_CONSTANT (116444736000000000);
381 (((dbus_int64_t) wfad.ftLastWriteTime.dwHighDateTime << 32) +
382 wfad.ftLastWriteTime.dwLowDateTime) / 10000000 - DBUS_INT64_CONSTANT (116444736000000000);
385 (((dbus_int64_t) wfad.ftCreationTime.dwHighDateTime << 32) +
386 wfad.ftCreationTime.dwLowDateTime) / 10000000 - DBUS_INT64_CONSTANT (116444736000000000);
397 WIN32_FIND_DATAA fileinfo;
416 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
421 "Could not allocate memory for directory filename copy");
431 "Could not append filename wildcard");
441 "Could not append filename wildcard 2");
451 "Could not allocate memory for directory iterator");
455 iter->finished =
FALSE;
457 iter->handle = FindFirstFileA (_dbus_string_get_const_data (&filespec), &(iter->fileinfo));
458 if (iter->handle == INVALID_HANDLE_VALUE)
460 if (GetLastError () == ERROR_NO_MORE_FILES)
461 iter->finished =
TRUE;
464 char *emsg = _dbus_win_error_string (GetLastError ());
466 "Failed to read directory \"%s\": %s",
467 _dbus_string_get_const_data (filename), emsg);
468 _dbus_win_free_error_string (emsg);
493 int saved_err = GetLastError();
495 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
500 if (!iter || iter->finished)
503 if (iter->offset > 0)
505 if (FindNextFileA (iter->handle, &(iter->fileinfo)) == 0)
507 if (GetLastError() == ERROR_NO_MORE_FILES)
509 SetLastError(saved_err);
514 char *emsg = _dbus_win_error_string (GetLastError ());
516 "Failed to get next in directory: %s", emsg);
517 _dbus_win_free_error_string (emsg);
528 if (iter->fileinfo.cFileName[0] ==
'.' &&
529 (iter->fileinfo.cFileName[1] ==
'\0' ||
530 (iter->fileinfo.cFileName[1] ==
'.' && iter->fileinfo.cFileName[2] ==
'\0')))
537 "No memory to read directory entry");
552 FindClose(iter->handle);
580 sep = _dbus_string_get_length (filename);
585 (_dbus_string_get_byte (filename, sep - 1) ==
'/' ||
586 _dbus_string_get_byte (filename, sep - 1) ==
'\\'))
593 _dbus_string_get_byte (filename, 1) ==
':' &&
594 isalpha (_dbus_string_get_byte (filename, 0))))
596 dirname, _dbus_string_get_length (dirname));
603 sep = MAX (sep1, sep2);
609 (_dbus_string_get_byte (filename, sep - 1) ==
'/' ||
610 _dbus_string_get_byte (filename, sep - 1) ==
'\\'))
617 _dbus_string_get_byte (filename, 1) ==
':' &&
618 isalpha (_dbus_string_get_byte (filename, 0))))
620 (_dbus_string_get_byte (filename, sep) ==
'/' ||
621 _dbus_string_get_byte (filename, sep) ==
'\\'))
623 dirname, _dbus_string_get_length (dirname));
626 dirname, _dbus_string_get_length (dirname));
653set_unix_uid_unsupported (
DBusError *error)
656 "UNIX user IDs not supported on Windows");
672 set_unix_uid_unsupported (error);
725 set_unix_uid_unsupported (error);
745_dbus_lm_strerror(
int error_number)
752 switch (error_number)
754 case NERR_NetNotStarted:
755 return "The workstation driver is not installed.";
756 case NERR_UnknownServer:
757 return "The server could not be located.";
759 return "An internal error occurred. The network cannot access a shared memory segment.";
760 case NERR_NoNetworkResource:
761 return "A network resource shortage occurred.";
762 case NERR_RemoteOnly:
763 return "This operation is not supported on workstations.";
764 case NERR_DevNotRedirected:
765 return "The device is not connected.";
766 case NERR_ServerNotStarted:
767 return "The Server service is not started.";
768 case NERR_ItemNotFound:
769 return "The queue is empty.";
770 case NERR_UnknownDevDir:
771 return "The device or directory does not exist.";
772 case NERR_RedirectedPath:
773 return "The operation is invalid on a redirected resource.";
774 case NERR_DuplicateShare:
775 return "The name has already been shared.";
777 return "The server is currently out of the requested resource.";
778 case NERR_TooManyItems:
779 return "Requested addition of items exceeds the maximum allowed.";
780 case NERR_InvalidMaxUsers:
781 return "The Peer service supports only two simultaneous users.";
782 case NERR_BufTooSmall:
783 return "The API return buffer is too small.";
785 return "A remote API error occurred.";
786 case NERR_LanmanIniError:
787 return "An error occurred when opening or reading the configuration file.";
788 case NERR_NetworkError:
789 return "A general network error occurred.";
790 case NERR_WkstaInconsistentState:
791 return "The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service.";
792 case NERR_WkstaNotStarted:
793 return "The Workstation service has not been started.";
794 case NERR_BrowserNotStarted:
795 return "The requested information is not available.";
796 case NERR_InternalError:
797 return "An internal error occurred.";
798 case NERR_BadTransactConfig:
799 return "The server is not configured for transactions.";
800 case NERR_InvalidAPI:
801 return "The requested API is not supported on the remote server.";
802 case NERR_BadEventName:
803 return "The event name is invalid.";
804 case NERR_DupNameReboot:
805 return "The computer name already exists on the network. Change it and restart the computer.";
806 case NERR_CfgCompNotFound:
807 return "The specified component could not be found in the configuration information.";
808 case NERR_CfgParamNotFound:
809 return "The specified parameter could not be found in the configuration information.";
810 case NERR_LineTooLong:
811 return "A line in the configuration file is too long.";
813 return "The printer does not exist.";
814 case NERR_JobNotFound:
815 return "The print job does not exist.";
816 case NERR_DestNotFound:
817 return "The printer destination cannot be found.";
818 case NERR_DestExists:
819 return "The printer destination already exists.";
821 return "The printer queue already exists.";
823 return "No more printers can be added.";
825 return "No more print jobs can be added.";
826 case NERR_DestNoRoom:
827 return "No more printer destinations can be added.";
829 return "This printer destination is idle and cannot accept control operations.";
830 case NERR_DestInvalidOp:
831 return "This printer destination request contains an invalid control function.";
832 case NERR_ProcNoRespond:
833 return "The print processor is not responding.";
834 case NERR_SpoolerNotLoaded:
835 return "The spooler is not running.";
836 case NERR_DestInvalidState:
837 return "This operation cannot be performed on the print destination in its current state.";
838 case NERR_QInvalidState:
839 return "This operation cannot be performed on the printer queue in its current state.";
840 case NERR_JobInvalidState:
841 return "This operation cannot be performed on the print job in its current state.";
842 case NERR_SpoolNoMemory:
843 return "A spooler memory allocation failure occurred.";
844 case NERR_DriverNotFound:
845 return "The device driver does not exist.";
846 case NERR_DataTypeInvalid:
847 return "The data type is not supported by the print processor.";
848 case NERR_ProcNotFound:
849 return "The print processor is not installed.";
850 case NERR_ServiceTableLocked:
851 return "The service database is locked.";
852 case NERR_ServiceTableFull:
853 return "The service table is full.";
854 case NERR_ServiceInstalled:
855 return "The requested service has already been started.";
856 case NERR_ServiceEntryLocked:
857 return "The service does not respond to control actions.";
858 case NERR_ServiceNotInstalled:
859 return "The service has not been started.";
860 case NERR_BadServiceName:
861 return "The service name is invalid.";
862 case NERR_ServiceCtlTimeout:
863 return "The service is not responding to the control function.";
864 case NERR_ServiceCtlBusy:
865 return "The service control is busy.";
866 case NERR_BadServiceProgName:
867 return "The configuration file contains an invalid service program name.";
868 case NERR_ServiceNotCtrl:
869 return "The service could not be controlled in its present state.";
870 case NERR_ServiceKillProc:
871 return "The service ended abnormally.";
872 case NERR_ServiceCtlNotValid:
873 return "The requested pause or stop is not valid for this service.";
874 case NERR_NotInDispatchTbl:
875 return "The service control dispatcher could not find the service name in the dispatch table.";
876 case NERR_BadControlRecv:
877 return "The service control dispatcher pipe read failed.";
878 case NERR_ServiceNotStarting:
879 return "A thread for the new service could not be created.";
880 case NERR_AlreadyLoggedOn:
881 return "This workstation is already logged on to the local-area network.";
882 case NERR_NotLoggedOn:
883 return "The workstation is not logged on to the local-area network.";
884 case NERR_BadUsername:
885 return "The user name or group name parameter is invalid.";
886 case NERR_BadPassword:
887 return "The password parameter is invalid.";
888 case NERR_UnableToAddName_W:
889 return "@W The logon processor did not add the message alias.";
890 case NERR_UnableToAddName_F:
891 return "The logon processor did not add the message alias.";
892 case NERR_UnableToDelName_W:
893 return "@W The logoff processor did not delete the message alias.";
894 case NERR_UnableToDelName_F:
895 return "The logoff processor did not delete the message alias.";
896 case NERR_LogonsPaused:
897 return "Network logons are paused.";
898 case NERR_LogonServerConflict:
899 return "A centralized logon-server conflict occurred.";
900 case NERR_LogonNoUserPath:
901 return "The server is configured without a valid user path.";
902 case NERR_LogonScriptError:
903 return "An error occurred while loading or running the logon script.";
904 case NERR_StandaloneLogon:
905 return "The logon server was not specified. Your computer will be logged on as STANDALONE.";
906 case NERR_LogonServerNotFound:
907 return "The logon server could not be found.";
908 case NERR_LogonDomainExists:
909 return "There is already a logon domain for this computer.";
910 case NERR_NonValidatedLogon:
911 return "The logon server could not validate the logon.";
912 case NERR_ACFNotFound:
913 return "The security database could not be found.";
914 case NERR_GroupNotFound:
915 return "The group name could not be found.";
916 case NERR_UserNotFound:
917 return "The user name could not be found.";
918 case NERR_ResourceNotFound:
919 return "The resource name could not be found.";
920 case NERR_GroupExists:
921 return "The group already exists.";
922 case NERR_UserExists:
923 return "The user account already exists.";
924 case NERR_ResourceExists:
925 return "The resource permission list already exists.";
926 case NERR_NotPrimary:
927 return "This operation is only allowed on the primary domain controller of the domain.";
928 case NERR_ACFNotLoaded:
929 return "The security database has not been started.";
931 return "There are too many names in the user accounts database.";
932 case NERR_ACFFileIOFail:
933 return "A disk I/O failure occurred.";
934 case NERR_ACFTooManyLists:
935 return "The limit of 64 entries per resource was exceeded.";
937 return "Deleting a user with a session is not allowed.";
938 case NERR_ACFNoParent:
939 return "The parent directory could not be located.";
940 case NERR_CanNotGrowSegment:
941 return "Unable to add to the security database session cache segment.";
942 case NERR_SpeGroupOp:
943 return "This operation is not allowed on this special group.";
944 case NERR_NotInCache:
945 return "This user is not cached in user accounts database session cache.";
946 case NERR_UserInGroup:
947 return "The user already belongs to this group.";
948 case NERR_UserNotInGroup:
949 return "The user does not belong to this group.";
950 case NERR_AccountUndefined:
951 return "This user account is undefined.";
952 case NERR_AccountExpired:
953 return "This user account has expired.";
954 case NERR_InvalidWorkstation:
955 return "The user is not allowed to log on from this workstation.";
956 case NERR_InvalidLogonHours:
957 return "The user is not allowed to log on at this time.";
958 case NERR_PasswordExpired:
959 return "The password of this user has expired.";
960 case NERR_PasswordCantChange:
961 return "The password of this user cannot change.";
962 case NERR_PasswordHistConflict:
963 return "This password cannot be used now.";
964 case NERR_PasswordTooShort:
965 return "The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements.";
966 case NERR_PasswordTooRecent:
967 return "The password of this user is too recent to change.";
968 case NERR_InvalidDatabase:
969 return "The security database is corrupted.";
970 case NERR_DatabaseUpToDate:
971 return "No updates are necessary to this replicant network/local security database.";
972 case NERR_SyncRequired:
973 return "This replicant database is outdated; synchronization is required.";
974 case NERR_UseNotFound:
975 return "The network connection could not be found.";
976 case NERR_BadAsgType:
977 return "This asg_type is invalid.";
978 case NERR_DeviceIsShared:
979 return "This device is currently being shared.";
980 case NERR_NoComputerName:
981 return "The computer name could not be added as a message alias. The name may already exist on the network.";
982 case NERR_MsgAlreadyStarted:
983 return "The Messenger service is already started.";
984 case NERR_MsgInitFailed:
985 return "The Messenger service failed to start.";
986 case NERR_NameNotFound:
987 return "The message alias could not be found on the network.";
988 case NERR_AlreadyForwarded:
989 return "This message alias has already been forwarded.";
990 case NERR_AddForwarded:
991 return "This message alias has been added but is still forwarded.";
992 case NERR_AlreadyExists:
993 return "This message alias already exists locally.";
994 case NERR_TooManyNames:
995 return "The maximum number of added message aliases has been exceeded.";
996 case NERR_DelComputerName:
997 return "The computer name could not be deleted.";
998 case NERR_LocalForward:
999 return "Messages cannot be forwarded back to the same workstation.";
1000 case NERR_GrpMsgProcessor:
1001 return "An error occurred in the domain message processor.";
1002 case NERR_PausedRemote:
1003 return "The message was sent, but the recipient has paused the Messenger service.";
1004 case NERR_BadReceive:
1005 return "The message was sent but not received.";
1006 case NERR_NameInUse:
1007 return "The message alias is currently in use. Try again later.";
1008 case NERR_MsgNotStarted:
1009 return "The Messenger service has not been started.";
1010 case NERR_NotLocalName:
1011 return "The name is not on the local computer.";
1012 case NERR_NoForwardName:
1013 return "The forwarded message alias could not be found on the network.";
1014 case NERR_RemoteFull:
1015 return "The message alias table on the remote station is full.";
1016 case NERR_NameNotForwarded:
1017 return "Messages for this alias are not currently being forwarded.";
1018 case NERR_TruncatedBroadcast:
1019 return "The broadcast message was truncated.";
1020 case NERR_InvalidDevice:
1021 return "This is an invalid device name.";
1022 case NERR_WriteFault:
1023 return "A write fault occurred.";
1024 case NERR_DuplicateName:
1025 return "A duplicate message alias exists on the network.";
1026 case NERR_DeleteLater:
1027 return "@W This message alias will be deleted later.";
1028 case NERR_IncompleteDel:
1029 return "The message alias was not successfully deleted from all networks.";
1030 case NERR_MultipleNets:
1031 return "This operation is not supported on computers with multiple networks.";
1032 case NERR_NetNameNotFound:
1033 return "This shared resource does not exist.";
1034 case NERR_DeviceNotShared:
1035 return "This device is not shared.";
1036 case NERR_ClientNameNotFound:
1037 return "A session does not exist with that computer name.";
1038 case NERR_FileIdNotFound:
1039 return "There is not an open file with that identification number.";
1040 case NERR_ExecFailure:
1041 return "A failure occurred when executing a remote administration command.";
1043 return "A failure occurred when opening a remote temporary file.";
1044 case NERR_TooMuchData:
1045 return "The data returned from a remote administration command has been truncated to 64K.";
1046 case NERR_DeviceShareConflict:
1047 return "This device cannot be shared as both a spooled and a non-spooled resource.";
1048 case NERR_BrowserTableIncomplete:
1049 return "The information in the list of servers may be incorrect.";
1050 case NERR_NotLocalDomain:
1051 return "The computer is not active in this domain.";
1052#ifdef NERR_IsDfsShare
1054 case NERR_IsDfsShare:
1055 return "The share must be removed from the Distributed File System before it can be deleted.";
1058 case NERR_DevInvalidOpCode:
1059 return "The operation is invalid for this device.";
1060 case NERR_DevNotFound:
1061 return "This device cannot be shared.";
1062 case NERR_DevNotOpen:
1063 return "This device was not open.";
1064 case NERR_BadQueueDevString:
1065 return "This device name list is invalid.";
1066 case NERR_BadQueuePriority:
1067 return "The queue priority is invalid.";
1068 case NERR_NoCommDevs:
1069 return "There are no shared communication devices.";
1070 case NERR_QueueNotFound:
1071 return "The queue you specified does not exist.";
1072 case NERR_BadDevString:
1073 return "This list of devices is invalid.";
1075 return "The requested device is invalid.";
1076 case NERR_InUseBySpooler:
1077 return "This device is already in use by the spooler.";
1078 case NERR_CommDevInUse:
1079 return "This device is already in use as a communication device.";
1080 case NERR_InvalidComputer:
1081 return "This computer name is invalid.";
1082 case NERR_MaxLenExceeded:
1083 return "The string and prefix specified are too long.";
1084 case NERR_BadComponent:
1085 return "This path component is invalid.";
1087 return "Could not determine the type of input.";
1088 case NERR_TooManyEntries:
1089 return "The buffer for types is not big enough.";
1090 case NERR_ProfileFileTooBig:
1091 return "Profile files cannot exceed 64K.";
1092 case NERR_ProfileOffset:
1093 return "The start offset is out of range.";
1094 case NERR_ProfileCleanup:
1095 return "The system cannot delete current connections to network resources.";
1096 case NERR_ProfileUnknownCmd:
1097 return "The system was unable to parse the command line in this file.";
1098 case NERR_ProfileLoadErr:
1099 return "An error occurred while loading the profile file.";
1100 case NERR_ProfileSaveErr:
1101 return "@W Errors occurred while saving the profile file. The profile was partially saved.";
1102 case NERR_LogOverflow:
1103 return "Log file %1 is full.";
1104 case NERR_LogFileChanged:
1105 return "This log file has changed between reads.";
1106 case NERR_LogFileCorrupt:
1107 return "Log file %1 is corrupt.";
1108 case NERR_SourceIsDir:
1109 return "The source path cannot be a directory.";
1110 case NERR_BadSource:
1111 return "The source path is illegal.";
1113 return "The destination path is illegal.";
1114 case NERR_DifferentServers:
1115 return "The source and destination paths are on different servers.";
1116 case NERR_RunSrvPaused:
1117 return "The Run server you requested is paused.";
1118 case NERR_ErrCommRunSrv:
1119 return "An error occurred when communicating with a Run server.";
1120 case NERR_ErrorExecingGhost:
1121 return "An error occurred when starting a background process.";
1122 case NERR_ShareNotFound:
1123 return "The shared resource you are connected to could not be found.";
1124 case NERR_InvalidLana:
1125 return "The LAN adapter number is invalid.";
1126 case NERR_OpenFiles:
1127 return "There are open files on the connection.";
1128 case NERR_ActiveConns:
1129 return "Active connections still exist.";
1130 case NERR_BadPasswordCore:
1131 return "This share name or password is invalid.";
1133 return "The device is being accessed by an active process.";
1134 case NERR_LocalDrive:
1135 return "The drive letter is in use locally.";
1136 case NERR_AlertExists:
1137 return "The specified client is already registered for the specified event.";
1138 case NERR_TooManyAlerts:
1139 return "The alert table is full.";
1140 case NERR_NoSuchAlert:
1141 return "An invalid or nonexistent alert name was raised.";
1142 case NERR_BadRecipient:
1143 return "The alert recipient is invalid.";
1144 case NERR_AcctLimitExceeded:
1145 return "A user's session with this server has been deleted.";
1146 case NERR_InvalidLogSeek:
1147 return "The log file does not contain the requested record number.";
1148 case NERR_BadUasConfig:
1149 return "The user accounts database is not configured correctly.";
1150 case NERR_InvalidUASOp:
1151 return "This operation is not permitted when the Netlogon service is running.";
1152 case NERR_LastAdmin:
1153 return "This operation is not allowed on the last administrative account.";
1154 case NERR_DCNotFound:
1155 return "Could not find domain controller for this domain.";
1156 case NERR_LogonTrackingError:
1157 return "Could not set logon information for this user.";
1158 case NERR_NetlogonNotStarted:
1159 return "The Netlogon service has not been started.";
1160 case NERR_CanNotGrowUASFile:
1161 return "Unable to add to the user accounts database.";
1162 case NERR_TimeDiffAtDC:
1163 return "This server's clock is not synchronized with the primary domain controller's clock.";
1164 case NERR_PasswordMismatch:
1165 return "A password mismatch has been detected.";
1166 case NERR_NoSuchServer:
1167 return "The server identification does not specify a valid server.";
1168 case NERR_NoSuchSession:
1169 return "The session identification does not specify a valid session.";
1170 case NERR_NoSuchConnection:
1171 return "The connection identification does not specify a valid connection.";
1172 case NERR_TooManyServers:
1173 return "There is no space for another entry in the table of available servers.";
1174 case NERR_TooManySessions:
1175 return "The server has reached the maximum number of sessions it supports.";
1176 case NERR_TooManyConnections:
1177 return "The server has reached the maximum number of connections it supports.";
1178 case NERR_TooManyFiles:
1179 return "The server cannot open more files because it has reached its maximum number.";
1180 case NERR_NoAlternateServers:
1181 return "There are no alternate servers registered on this server.";
1182 case NERR_TryDownLevel:
1183 return "Try down-level (remote admin protocol) version of API instead.";
1184 case NERR_UPSDriverNotStarted:
1185 return "The UPS driver could not be accessed by the UPS service.";
1186 case NERR_UPSInvalidConfig:
1187 return "The UPS service is not configured correctly.";
1188 case NERR_UPSInvalidCommPort:
1189 return "The UPS service could not access the specified Comm Port.";
1190 case NERR_UPSSignalAsserted:
1191 return "The UPS indicated a line fail or low battery situation. Service not started.";
1192 case NERR_UPSShutdownFailed:
1193 return "The UPS service failed to perform a system shut down.";
1194 case NERR_BadDosRetCode:
1195 return "The program below returned an MS-DOS error code:";
1196 case NERR_ProgNeedsExtraMem:
1197 return "The program below needs more memory:";
1198 case NERR_BadDosFunction:
1199 return "The program below called an unsupported MS-DOS function:";
1200 case NERR_RemoteBootFailed:
1201 return "The workstation failed to boot.";
1202 case NERR_BadFileCheckSum:
1203 return "The file below is corrupt.";
1204 case NERR_NoRplBootSystem:
1205 return "No loader is specified in the boot-block definition file.";
1206 case NERR_RplLoadrNetBiosErr:
1207 return "NetBIOS returned an error: The NCB and SMB are dumped above.";
1208 case NERR_RplLoadrDiskErr:
1209 return "A disk I/O error occurred.";
1210 case NERR_ImageParamErr:
1211 return "Image parameter substitution failed.";
1212 case NERR_TooManyImageParams:
1213 return "Too many image parameters cross disk sector boundaries.";
1214 case NERR_NonDosFloppyUsed:
1215 return "The image was not generated from an MS-DOS diskette formatted with /S.";
1216 case NERR_RplBootRestart:
1217 return "Remote boot will be restarted later.";
1218 case NERR_RplSrvrCallFailed:
1219 return "The call to the Remoteboot server failed.";
1220 case NERR_CantConnectRplSrvr:
1221 return "Cannot connect to the Remoteboot server.";
1222 case NERR_CantOpenImageFile:
1223 return "Cannot open image file on the Remoteboot server.";
1224 case NERR_CallingRplSrvr:
1225 return "Connecting to the Remoteboot server...";
1226 case NERR_StartingRplBoot:
1227 return "Connecting to the Remoteboot server...";
1228 case NERR_RplBootServiceTerm:
1229 return "Remote boot service was stopped; check the error log for the cause of the problem.";
1230 case NERR_RplBootStartFailed:
1231 return "Remote boot startup failed; check the error log for the cause of the problem.";
1232 case NERR_RPL_CONNECTED:
1233 return "A second connection to a Remoteboot resource is not allowed.";
1234 case NERR_BrowserConfiguredToNotRun:
1235 return "The browser service was configured with MaintainServerList=No.";
1236 case NERR_RplNoAdaptersStarted:
1237 return "Service failed to start since none of the network adapters started with this service.";
1238 case NERR_RplBadRegistry:
1239 return "Service failed to start due to bad startup information in the registry.";
1240 case NERR_RplBadDatabase:
1241 return "Service failed to start because its database is absent or corrupt.";
1242 case NERR_RplRplfilesShare:
1243 return "Service failed to start because RPLFILES share is absent.";
1244 case NERR_RplNotRplServer:
1245 return "Service failed to start because RPLUSER group is absent.";
1246 case NERR_RplCannotEnum:
1247 return "Cannot enumerate service records.";
1248 case NERR_RplWkstaInfoCorrupted:
1249 return "Workstation record information has been corrupted.";
1250 case NERR_RplWkstaNotFound:
1251 return "Workstation record was not found.";
1252 case NERR_RplWkstaNameUnavailable:
1253 return "Workstation name is in use by some other workstation.";
1254 case NERR_RplProfileInfoCorrupted:
1255 return "Profile record information has been corrupted.";
1256 case NERR_RplProfileNotFound:
1257 return "Profile record was not found.";
1258 case NERR_RplProfileNameUnavailable:
1259 return "Profile name is in use by some other profile.";
1260 case NERR_RplProfileNotEmpty:
1261 return "There are workstations using this profile.";
1262 case NERR_RplConfigInfoCorrupted:
1263 return "Configuration record information has been corrupted.";
1264 case NERR_RplConfigNotFound:
1265 return "Configuration record was not found.";
1266 case NERR_RplAdapterInfoCorrupted:
1267 return "Adapter ID record information has been corrupted.";
1268 case NERR_RplInternal:
1269 return "An internal service error has occurred.";
1270 case NERR_RplVendorInfoCorrupted:
1271 return "Vendor ID record information has been corrupted.";
1272 case NERR_RplBootInfoCorrupted:
1273 return "Boot block record information has been corrupted.";
1274 case NERR_RplWkstaNeedsUserAcct:
1275 return "The user account for this workstation record is missing.";
1276 case NERR_RplNeedsRPLUSERAcct:
1277 return "The RPLUSER local group could not be found.";
1278 case NERR_RplBootNotFound:
1279 return "Boot block record was not found.";
1280 case NERR_RplIncompatibleProfile:
1281 return "Chosen profile is incompatible with this workstation.";
1282 case NERR_RplAdapterNameUnavailable:
1283 return "Chosen network adapter ID is in use by some other workstation.";
1284 case NERR_RplConfigNotEmpty:
1285 return "There are profiles using this configuration.";
1286 case NERR_RplBootInUse:
1287 return "There are workstations, profiles, or configurations using this boot block.";
1288 case NERR_RplBackupDatabase:
1289 return "Service failed to backup Remoteboot database.";
1290 case NERR_RplAdapterNotFound:
1291 return "Adapter record was not found.";
1292 case NERR_RplVendorNotFound:
1293 return "Vendor record was not found.";
1294 case NERR_RplVendorNameUnavailable:
1295 return "Vendor name is in use by some other vendor record.";
1296 case NERR_RplBootNameUnavailable:
1297 return "(boot name, vendor ID) is in use by some other boot block record.";
1298 case NERR_RplConfigNameUnavailable:
1299 return "Configuration name is in use by some other configuration.";
1300 case NERR_DfsInternalCorruption:
1301 return "The internal database maintained by the Dfs service is corrupt.";
1302 case NERR_DfsVolumeDataCorrupt:
1303 return "One of the records in the internal Dfs database is corrupt.";
1304 case NERR_DfsNoSuchVolume:
1305 return "There is no DFS name whose entry path matches the input Entry Path.";
1306 case NERR_DfsVolumeAlreadyExists:
1307 return "A root or link with the given name already exists.";
1308 case NERR_DfsAlreadyShared:
1309 return "The server share specified is already shared in the Dfs.";
1310 case NERR_DfsNoSuchShare:
1311 return "The indicated server share does not support the indicated DFS namespace.";
1312 case NERR_DfsNotALeafVolume:
1313 return "The operation is not valid on this portion of the namespace.";
1314 case NERR_DfsLeafVolume:
1315 return "The operation is not valid on this portion of the namespace.";
1316 case NERR_DfsVolumeHasMultipleServers:
1317 return "The operation is ambiguous because the link has multiple servers.";
1318 case NERR_DfsCantCreateJunctionPoint:
1319 return "Unable to create a link.";
1320 case NERR_DfsServerNotDfsAware:
1321 return "The server is not Dfs Aware.";
1322 case NERR_DfsBadRenamePath:
1323 return "The specified rename target path is invalid.";
1324 case NERR_DfsVolumeIsOffline:
1325 return "The specified DFS link is offline.";
1326 case NERR_DfsNoSuchServer:
1327 return "The specified server is not a server for this link.";
1328 case NERR_DfsCyclicalName:
1329 return "A cycle in the Dfs name was detected.";
1330 case NERR_DfsNotSupportedInServerDfs:
1331 return "The operation is not supported on a server-based Dfs.";
1332 case NERR_DfsDuplicateService:
1333 return "This link is already supported by the specified server-share.";
1334 case NERR_DfsCantRemoveLastServerShare:
1335 return "Can't remove the last server-share supporting this root or link.";
1336 case NERR_DfsVolumeIsInterDfs:
1337 return "The operation is not supported for an Inter-DFS link.";
1338 case NERR_DfsInconsistent:
1339 return "The internal state of the Dfs Service has become inconsistent.";
1340 case NERR_DfsServerUpgraded:
1341 return "The Dfs Service has been installed on the specified server.";
1342 case NERR_DfsDataIsIdentical:
1343 return "The Dfs data being reconciled is identical.";
1344 case NERR_DfsCantRemoveDfsRoot:
1345 return "The DFS root cannot be deleted. Uninstall DFS if required.";
1346 case NERR_DfsChildOrParentInDfs:
1347 return "A child or parent directory of the share is already in a Dfs.";
1348 case NERR_DfsInternalError:
1349 return "Dfs internal error.";
1353 case NERR_SetupAlreadyJoined:
1354 return "This machine is already joined to a domain.";
1355 case NERR_SetupNotJoined:
1356 return "This machine is not currently joined to a domain.";
1357 case NERR_SetupDomainController:
1358 return "This machine is a domain controller and cannot be unjoined from a domain.";
1359 case NERR_DefaultJoinRequired:
1360 return "The destination domain controller does not support creating machine accounts in OUs.";
1361 case NERR_InvalidWorkgroupName:
1362 return "The specified workgroup name is invalid.";
1363 case NERR_NameUsesIncompatibleCodePage:
1364 return "The specified computer name is incompatible with the default language used on the domain controller.";
1365 case NERR_ComputerAccountNotFound:
1366 return "The specified computer account could not be found.";
1367 case NERR_PersonalSku:
1368 return "This version of Windows cannot be joined to a domain.";
1369 case NERR_PasswordMustChange:
1370 return "The password must change at the next logon.";
1371 case NERR_AccountLockedOut:
1372 return "The account is locked out.";
1373 case NERR_PasswordTooLong:
1374 return "The password is too long.";
1375 case NERR_PasswordNotComplexEnough:
1376 return "The password does not meet the complexity policy.";
1377 case NERR_PasswordFilterError:
1378 return "The password does not meet the requirements of the password filter DLLs.";
1382 msg = strerror (error_number);
1413 "_dbus_command_for_pid() not implemented on Windows");
1438 if (!_dbus_get_install_root (&runtime_prefix))
1444 if (_dbus_string_get_length (&runtime_prefix) == 0)
1456 &runtime_prefix, 0, _dbus_string_get_length (&runtime_prefix),
1457 path, 0, strlen (DBUS_PREFIX) + 1))
1469 for (i = 0; i < _dbus_string_get_length (path); i++)
1471 if (_dbus_string_get_byte (path, i) ==
'\\')
1472 _dbus_string_set_byte (path, i,
'/');
1480#define DBUS_STANDARD_SESSION_SERVICEDIR "/dbus-1/services"
1481#define DBUS_STANDARD_SYSTEM_SERVICEDIR "/dbus-1/system-services"
1517 const char *common_progs;
1528 if (data_dir !=
NULL)
1554 _dbus_string_get_const_data (&p)))
1569 if (common_progs !=
NULL)
1579 DBUS_STANDARD_SESSION_SERVICEDIR,
1618 const char *basename)
1652 return _dbus_get_config_file_name(str,
"system.conf");
1666 return _dbus_get_config_file_name(str,
"session.conf");
void dbus_set_error(DBusError *error, const char *name, const char *format,...)
Assigns an error name and message to a DBusError.
dbus_bool_t dbus_error_is_set(const DBusError *error)
Checks whether an error occurred (the error is set).
#define _dbus_assert(condition)
Aborts with an error message if the condition is false.
const char * _dbus_error_from_system_errno(void)
Converts the current system errno value into a DBusError name.
const char * _dbus_strerror_from_errno(void)
Get error message from errno.
#define NULL
A null pointer, defined appropriately for C or C++.
#define TRUE
Expands to "1".
#define FALSE
Expands to "0".
void dbus_free(void *memory)
Frees a block of memory previously allocated by dbus_malloc() or dbus_malloc0().
#define dbus_new0(type, count)
Safe macro for using dbus_malloc0().
#define DBUS_ERROR_NOT_SUPPORTED
Requested operation isn't supported (like ENOSYS on UNIX).
#define DBUS_ERROR_FAILED
A generic error; "something went wrong" - see the error message for more.
#define DBUS_ERROR_NO_MEMORY
There was not enough memory to complete an operation.
dbus_bool_t _dbus_string_set_length(DBusString *str, int length)
Sets the length of a string.
dbus_bool_t _dbus_string_append(DBusString *str, const char *buffer)
Appends a nul-terminated C-style string to a DBusString.
dbus_bool_t _dbus_string_init(DBusString *str)
Initializes a string.
void _dbus_string_init_const(DBusString *str, const char *value)
Initializes a constant string.
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_string_append_int(DBusString *str, long value)
Appends an integer to a DBusString.
dbus_bool_t _dbus_parse_unix_user_from_config(const DBusString *username, dbus_uid_t *uid_p)
Parse a UNIX user from the bus config file.
dbus_bool_t _dbus_string_ends_with_c_str(const DBusString *a, const char *c_str)
Returns whether a string ends with the given suffix.
dbus_bool_t _dbus_string_starts_with_c_str(const DBusString *a, const char *c_str)
Checks whether a string starts with the given C string.
dbus_bool_t _dbus_string_init_from_string(DBusString *str, const DBusString *from)
Initializes a string from another string.
void _dbus_string_free(DBusString *str)
Frees a string created by _dbus_string_init(), and fills it with the same contents as #_DBUS_STRING_I...
dbus_bool_t _dbus_unix_user_is_process_owner(dbus_uid_t uid)
Checks to see if the UNIX user ID matches the UID of the process.
dbus_bool_t _dbus_string_find_byte_backward(const DBusString *str, int start, unsigned char byte, int *found)
Find the given byte scanning backward from the given start.
dbus_bool_t _dbus_windows_user_is_process_owner(const char *windows_sid)
Checks to see if the Windows user SID matches the owner of the process.
dbus_bool_t _dbus_parse_unix_group_from_config(const DBusString *groupname, dbus_gid_t *gid_p)
Parse a UNIX group from the bus config file.
dbus_bool_t _dbus_unix_groups_from_uid(dbus_uid_t uid, dbus_gid_t **group_ids, int *n_group_ids, DBusError *error)
Gets all groups corresponding to the given UNIX user ID.
dbus_bool_t _dbus_unix_user_is_at_console(dbus_uid_t uid, DBusError *error)
Checks to see if the UNIX user ID is at the console.
dbus_bool_t _dbus_string_copy_len(const DBusString *source, int start, int len, DBusString *dest, int insert_at)
Like _dbus_string_copy(), but can copy a segment from the middle of the source string.
dbus_bool_t _dbus_string_get_dirname(const DBusString *filename, DBusString *dirname)
Get the directory name from a complete filename.
dbus_bool_t _dbus_string_replace_len(const DBusString *source, int start, int len, DBusString *dest, int replace_at, int replace_len)
Replaces a segment of dest string with a segment of source string.
dbus_bool_t _dbus_stat(const DBusString *filename, DBusStat *statbuf, DBusError *error)
stat() wrapper.
dbus_bool_t _dbus_get_standard_session_servicedirs(DBusList **dirs)
Returns the standard directories for a session bus to look for service activation files.
void _dbus_daemon_report_ready(void)
Report to a service manager that the daemon calling this function is ready for use.
dbus_bool_t _dbus_write_pid_to_file_and_pipe(const DBusString *pidfile, DBusPipe *print_pid_pipe, dbus_pid_t pid_to_write, DBusError *error)
Writes the given pid_to_write to a pidfile (if non-NULL) and/or to a pipe (if non-NULL).
void _dbus_directory_close(DBusDirIter *iter)
Closes a directory iteration.
unsigned long dbus_uid_t
A user ID.
dbus_bool_t _dbus_get_session_config_file(DBusString *str)
Get the absolute path of the session.conf file.
unsigned long dbus_pid_t
A process ID.
void _dbus_daemon_report_reloading(void)
Report to a service manager that the daemon calling this function is reloading configuration.
unsigned long dbus_gid_t
A group ID.
dbus_bool_t _dbus_command_for_pid(unsigned long pid, DBusString *str, int max_len, DBusError *error)
Get a printable string describing the command used to execute the process with pid.
dbus_bool_t _dbus_get_system_config_file(DBusString *str)
Get the absolute path of the system.conf file (there is no system bus on Windows so this can just ret...
DBusDirIter * _dbus_directory_open(const DBusString *filename, DBusError *error)
Open a directory to iterate over.
dbus_bool_t _dbus_set_up_transient_session_servicedirs(DBusList **dirs, DBusError *error)
Returns the standard directories for a session bus to look for transient service activation files.
#define DBUS_UID_UNSET
an invalid UID used to represent an uninitialized dbus_uid_t field
dbus_bool_t _dbus_verify_daemon_user(const char *user)
Verify that after the fork we can successfully change to this user.
const char * _dbus_getenv(const char *varname)
Wrapper for getenv().
dbus_bool_t _dbus_get_standard_system_servicedirs(DBusList **dirs)
Returns the standard directories for a system bus to look for service activation files.
void _dbus_daemon_report_reloaded(void)
Report to a service manager that the daemon calling this function is reloading configuration.
#define DBUS_GID_UNSET
an invalid GID used to represent an uninitialized dbus_gid_t field
dbus_bool_t _dbus_change_to_daemon_user(const char *user, DBusError *error)
Changes the user and group the bus is running as.
void _dbus_daemon_report_stopping(void)
Report to a service manager that the daemon calling this function is shutting down.
dbus_bool_t _dbus_directory_get_next_file(DBusDirIter *iter, DBusString *filename, DBusError *error)
Get next file in the directory.
dbus_bool_t _dbus_concat_dir_and_file(DBusString *dir, const DBusString *next_component)
Appends the given filename to the given directory.
dbus_bool_t _dbus_become_daemon(const DBusString *pidfile, DBusPipe *print_pid_pipe, DBusError *error, dbus_bool_t keep_umask)
Does the chdir, fork, setsid, etc.
dbus_bool_t _dbus_split_paths_and_append(DBusString *dirs, const char *suffix, DBusList **dir_list)
Split paths into a list of char strings.
dbus_bool_t _dbus_replace_install_prefix(DBusString *path)
Replace the DBUS_PREFIX in the given path, in-place, by the current D-Bus installation directory.
dbus_uint32_t dbus_bool_t
A boolean, valid values are TRUE and FALSE.
Internals of directory iterator.
Object representing an exception.
Portable struct with stat() results.
unsigned long nlink
Number of hard links.
unsigned long size
Size of file.
dbus_uid_t uid
User owning file.
unsigned long mode
File mode.
dbus_gid_t gid
Group owning file.
unsigned long atime
Access time.
unsigned long ctime
Creation time.
unsigned long mtime
Modify time.