2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
23 * @APPLE_LICENSE_HEADER_END@
27 * Modification History
29 * May 29, 2003 Allan Nathanson <ajn@apple.com>
36 #include <SCPreferencesSetSpecific.h>
39 static SCPreferencesRef
42 SCPreferencesRef prefs
;
44 prefs
= SCPreferencesCreate(NULL
, CFSTR("scutil"), NULL
);
48 CFSTR("SCPreferencesCreate() failed: %s\n"),
49 SCErrorString(SCError()));
58 _save(SCPreferencesRef prefs
)
60 if (!SCPreferencesCommitChanges(prefs
)) {
62 case kSCStatusAccessError
:
63 SCPrint(TRUE
, stderr
, CFSTR("Permission denied.\n"));
68 CFSTR("SCPreferencesCommitChanges() failed: %s\n"),
69 SCErrorString(SCError()));
75 if (!SCPreferencesApplyChanges(prefs
)) {
78 CFSTR("SCPreferencesApplyChanges() failed: %s\n"),
79 SCErrorString(SCError()));
88 _copyStringFromSTDIN()
94 if (fgets(buf
, sizeof(buf
), stdin
) == NULL
) {
99 if (buf
[len
-1] == '\n') {
103 utf8
= CFStringCreateWithBytes(NULL
, buf
, len
, kCFStringEncodingUTF8
, TRUE
);
109 get_ComputerName(int argc
, char **argv
)
111 CFStringEncoding encoding
;
112 CFStringRef hostname
;
115 hostname
= SCDynamicStoreCopyComputerName(NULL
, &encoding
);
117 int sc_status
= SCError();
120 case kSCStatusNoKey
:
123 CFSTR("ComputerName: not set\n"));
128 CFSTR("SCDynamicStoreCopyComputerName() failed: %s\n"),
129 SCErrorString(SCError()));
135 utf8
= CFStringCreateExternalRepresentation(NULL
, hostname
, kCFStringEncodingUTF8
, 0);
139 CFSTR("ComputerName: could not convert to external representation\n"));
142 SCPrint(TRUE
, stdout
, CFSTR("%.*s\n"), CFDataGetLength(utf8
), CFDataGetBytePtr(utf8
));
151 set_ComputerName(int argc
, char **argv
)
153 CFStringEncoding encoding
;
154 CFStringRef hostname
;
155 SCPreferencesRef prefs
;
158 hostname
= _copyStringFromSTDIN();
159 encoding
= kCFStringEncodingUTF8
;
161 hostname
= CFStringCreateWithCString(NULL
, argv
[0], kCFStringEncodingASCII
);
162 encoding
= kCFStringEncodingASCII
;
166 if (!SCPreferencesSetComputerName(prefs
, hostname
, encoding
)) {
169 CFSTR("SCPreferencesSetComputerName() failed: %s\n"),
170 SCErrorString(SCError()));
181 get_LocalHostName(int argc
, char **argv
)
183 CFStringRef hostname
;
185 hostname
= SCDynamicStoreCopyLocalHostName(NULL
);
187 int sc_status
= SCError();
190 case kSCStatusNoKey
:
193 CFSTR("LocalHostName: not set\n"));
198 CFSTR("SCDynamicStoreCopyLocalHostName() failed: %s\n"),
199 SCErrorString(SCError()));
205 SCPrint(TRUE
, stdout
, CFSTR("%@\n"), hostname
);
212 set_LocalHostName(int argc
, char **argv
)
214 CFStringRef hostname
= NULL
;
215 SCPreferencesRef prefs
;
218 hostname
= _copyStringFromSTDIN();
220 hostname
= CFStringCreateWithCString(NULL
, argv
[0], kCFStringEncodingASCII
);
224 if (!SCPreferencesSetLocalHostName(prefs
, hostname
)) {
227 CFSTR("SCPreferencesSetLocalHostName() failed: %s\n"),
228 SCErrorString(SCError()));
238 typedef void (*pref_func
) (int argc
, char **argv
);
245 { "ComputerName", get_ComputerName
, set_ComputerName
},
246 { "LocalHostName", get_LocalHostName
, set_LocalHostName
}
248 #define N_PREFS (sizeof(prefs) / sizeof(prefs[0]))
256 for (i
= 0; i
< (int)N_PREFS
; i
++) {
257 if (strcmp(pref
, prefs
[i
].pref
) == 0) {
267 do_getPref(char *pref
, int argc
, char **argv
)
273 (*prefs
[i
].get
)(argc
, argv
);
280 do_setPref(char *pref
, int argc
, char **argv
)
286 (*prefs
[i
].set
)(argc
, argv
);