+ } else if (strcmp(command, "rank") == 0) {
+ SCNetworkServicePrimaryRank rank = kSCNetworkServicePrimaryRankDefault;
+ SCNetworkServiceRef service = (argc < 2) ? net_service : NULL;
+
+ if (argc < 1) {
+ SCPrint(TRUE, stdout, CFSTR("rank not specified\n"));
+ return;
+ }
+
+ if (strlen(argv[0]) > 0) {
+ if (strcasecmp(argv[0], "Never") == 0) {
+ rank = kSCNetworkServicePrimaryRankNever;
+ } else if ((service != net_service) && (strcasecmp(argv[0], "First") == 0)) {
+ rank = kSCNetworkServicePrimaryRankFirst;
+ } else if ((service != net_service) && (strcasecmp(argv[0], "Last") == 0)) {
+ rank = kSCNetworkServicePrimaryRankLast;
+ } else if ((service != net_service) && (strcasecmp(argv[0], "Scoped") == 0)) {
+ rank = kSCNetworkServicePrimaryRankScoped;
+ } else {
+ SCPrint(TRUE, stdout, CFSTR("rank not valid\n"));
+ return;
+ }
+ }
+ argv++;
+ argc--;
+
+ if (service == NULL) {
+ CFStringRef serviceID;
+ SCDynamicStoreRef store;
+
+ store = SCDynamicStoreCreate(NULL,
+ CFSTR("scutil (set primary rank)"),
+ NULL,
+ NULL);
+ serviceID = SCNetworkServiceGetServiceID(net_service);
+ service = _SCNetworkServiceCopyActive(store, serviceID);
+ CFRelease(store);
+
+ argv++;
+ argc--;
+ }
+
+ ok = SCNetworkServiceSetPrimaryRank(service, rank);
+ if (service != net_service) CFRelease(service);
+ if (ok) {
+ if (service == net_service) _prefs_changed = TRUE;
+ } else {
+ SCPrint(TRUE, stdout, CFSTR("%s\n"), SCErrorString(SCError()));
+ return;
+ }
+ } else if (strcmp(command, "id") == 0) {
+ CFStringRef serviceID;
+
+ if ((argc < 1) || (strlen(argv[0]) == 0)) {
+ SCPrint(TRUE, stdout, CFSTR("set id not specified\n"));
+ return;
+ }
+
+ serviceID = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
+ argv++;
+ argc--;
+
+ ok = _SCNetworkServiceSetServiceID(net_service, serviceID);
+ CFRelease(serviceID);
+ if (!ok) {
+ SCPrint(TRUE, stdout, CFSTR("%s\n"), SCErrorString(SCError()));
+ return;
+ }
+
+ _prefs_changed = TRUE;