diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index ba758170..4a59846a 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -513,5 +513,13 @@ module Linguist end end + disambiguate ".x" do |data| + if /\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(/.match(data) + Language["RPC"] + elsif /^%(end|ctor|hook|group)\b/.match(data) + Language["Logos"] + end + end + end end diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 50854668..edbb5597 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3753,6 +3753,17 @@ RMarkdown: - ".rmd" tm_scope: source.gfm language_id: 313 +RPC: + type: programming + aliases: + - rpcgen + - oncrpc + - xdr + ace_mode: c_cpp + extensions: + - ".x" + tm_scope: source.c + language_id: 1031374237 RPM Spec: type: data tm_scope: source.rpm-spec diff --git a/samples/Logos/NCHax.x b/samples/Logos/NCHax.x new file mode 100644 index 00000000..3ab08be0 --- /dev/null +++ b/samples/Logos/NCHax.x @@ -0,0 +1,57 @@ +#import +#import +#import +#import + +static NSString *const kHBDPWeeAppIdentifier = @"ws.hbang.dailypaperweeapp"; + +#pragma mark - Change section header and icon + +// courtesy of benno + +BOOL isDailyPaper = NO; + +%hook SBBulletinObserverViewController + +- (void)_addSection:(BBSectionInfo *)section toCategory:(NSInteger)category widget:(id)widget { + if ([section.sectionID isEqualToString:kHBDPWeeAppIdentifier]) { + isDailyPaper = YES; + %orig; + isDailyPaper = NO; + } else { + %orig; + } +} + +%end + +%hook SBBulletinListSection + +- (void)setDisplayName:(NSString *)displayName { + %orig(isDailyPaper ? @"Current Wallpaper" : displayName); +} + +- (void)setIconImage:(UIImage *)iconImage { + %orig(isDailyPaper ? [UIImage imageNamed:@"icon" inBundle:[NSBundle bundleWithPath:@"/Library/PreferenceBundles/DailyPaper.bundle"]] : iconImage); +} + +%end + +#pragma mark - Enable by default + +%hook SBNotificationCenterDataProviderController + +- (NSArray *)_copyDefaultEnabledWidgetIDs { + NSArray *defaultWidgets = %orig; + return [[defaultWidgets arrayByAddingObject:kHBDPWeeAppIdentifier] copy]; +} + +%end + +#pragma mark - Constructor + +%ctor { + if (!IS_IOS_OR_NEWER(iOS_8_0)) { + %init; + } +} diff --git a/samples/Logos/NoCarrier.x b/samples/Logos/NoCarrier.x new file mode 100644 index 00000000..9b7201c9 --- /dev/null +++ b/samples/Logos/NoCarrier.x @@ -0,0 +1,42 @@ +// +// NoCarrier.x +// NoCarrier +// +// Created by Jonas Gessner on 27.01.2014. +// Copyright (c) 2014 Jonas Gessner. All rights reserved. +// + +#import + +#include + +%group main + +%hook UIStatusBarServiceItemView + +- (id)_serviceContentsImage { + return nil; +} + +- (CGFloat)extraLeftPadding { + return 0.0f; +} + +- (CGFloat)extraRightPadding { + return 0.0f; +} + +- (CGFloat)standardPadding { + return 2.0f; +} + +%end + +%end + + +%ctor { + @autoreleasepool { + %init(main); + } +} diff --git a/samples/Logos/Tweak.x b/samples/Logos/Tweak.x new file mode 100644 index 00000000..4d5ed039 --- /dev/null +++ b/samples/Logos/Tweak.x @@ -0,0 +1,239 @@ +/* + * ShadowSocks Per-App Proxy Plugin + * https://github.com/linusyang/MobileShadowSocks + * + * Copyright (c) 2014 Linus Yang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#define FUNC_NAME SCDynamicStoreCopyProxies +#define ORIG_FUNC original_ ## FUNC_NAME +#define CUST_FUNC custom_ ## FUNC_NAME + +#define DECL_FUNC(ret, ...) \ + extern ret FUNC_NAME(__VA_ARGS__); \ + static ret (*ORIG_FUNC)(__VA_ARGS__); \ + ret CUST_FUNC(__VA_ARGS__) + +#define HOOK_FUNC() \ + MSHookFunction(FUNC_NAME, (void *) CUST_FUNC, (void **) &ORIG_FUNC) + +typedef const struct __SCDynamicStore *SCDynamicStoreRef; +void MSHookFunction(void *symbol, void *replace, void **result); + +static BOOL proxyEnabled = YES; +static BOOL spdyDisabled = YES; +static BOOL finderEnabled = YES; + +static BOOL getValue(NSDictionary *dict, NSString *key, BOOL defaultVal) +{ + if (dict == nil || key == nil) { + return defaultVal; + } + NSNumber *valObj = [dict objectForKey:key]; + if (valObj == nil) { + return defaultVal; + } + return [valObj boolValue]; +} + +static void updateSettings(void) +{ + proxyEnabled = YES; + spdyDisabled = YES; + finderEnabled = YES; + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Preferences/com.linusyang.ssperapp.plist"]; + if (dict != nil) { + NSString *bundleName = [[NSBundle mainBundle] bundleIdentifier]; + if (getValue(dict, @"SSPerAppEnabled", NO) && bundleName != nil) { + NSString *entry = [[NSString alloc] initWithFormat:@"Enabled-%@", bundleName]; + proxyEnabled = getValue(dict, entry, NO); + if (getValue(dict, @"SSPerAppReversed", NO)) { + proxyEnabled = !proxyEnabled; + } + [entry release]; + } + spdyDisabled = getValue(dict, @"SSPerAppDisableSPDY", YES); + finderEnabled = getValue(dict, @"SSPerAppFinder", YES); + [dict release]; + } +} + +DECL_FUNC(CFDictionaryRef, SCDynamicStoreRef store) +{ + if (proxyEnabled) { + return ORIG_FUNC(store); + } + CFMutableDictionaryRef proxyDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + int zero = 0; + CFNumberRef zeroNumber = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &zero); + CFDictionarySetValue(proxyDict, CFSTR("HTTPEnable"), zeroNumber); + CFDictionarySetValue(proxyDict, CFSTR("HTTPProxyType"), zeroNumber); + CFDictionarySetValue(proxyDict, CFSTR("HTTPSEnable"), zeroNumber); + CFDictionarySetValue(proxyDict, CFSTR("ProxyAutoConfigEnable"), zeroNumber); + CFRelease(zeroNumber); + return proxyDict; +} + +@interface SettingTableViewController + +- (BOOL)useLibFinder; +- (UIViewController *)allocFinderController; +- (void)finderSelectedFilePath:(NSString *)path checkSanity:(BOOL)check; + +@end + +%group FinderHook + +%hook SettingTableViewController +- (BOOL)useLibFinder +{ + return finderEnabled; +} + +- (UIViewController *)allocFinderController +{ + LFFinderController* finder = [[LFFinderController alloc] initWithMode:LFFinderModeDefault]; + finder.actionDelegate = self; + return finder; +} + +%new +-(void)finder:(LFFinderController*)finder didSelectItemAtPath:(NSString*)path +{ + [self finderSelectedFilePath:path checkSanity:NO]; +} +%end + +%end + +%group TwitterHook + +%hook T1SPDYConfigurationChangeListener +- (BOOL)_shouldEnableSPDY +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} +%end + +%end + +%group FacebookHook + +%hook FBRequester +- (BOOL)allowSPDY +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} + +- (BOOL)useDNSCache +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} +%end + +%hook FBNetworkerRequest +- (BOOL)disableSPDY +{ + if (spdyDisabled) { + return YES; + } else { + return %orig; + } +} +%end + +%hook FBRequesterState +- (BOOL)didUseSPDY +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} +%end + +%hook FBAppConfigService +- (BOOL)disableDNSCache +{ + if (spdyDisabled) { + return YES; + } else { + return %orig; + } +} +%end + +%hook FBNetworker +- (BOOL)_shouldAllowUseOfDNSCache:(id)arg +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} +%end + +%hook FBAppSessionController +- (BOOL)networkerShouldAllowUseOfDNSCache:(id)arg +{ + if (spdyDisabled) { + return NO; + } else { + return %orig; + } +} +%end + +%end + +%ctor +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSString *bundleName = [[NSBundle mainBundle] bundleIdentifier]; + if (bundleName != nil && ![bundleName isEqualToString:@"com.apple.springboard"]) { + updateSettings(); + CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback) updateSettings, CFSTR("com.linusyang.ssperapp.settingschanged"), NULL, CFNotificationSuspensionBehaviorCoalesce); + if ([bundleName isEqualToString:@"com.linusyang.MobileShadowSocks"]) { + %init(FinderHook); + } else { + HOOK_FUNC(); + if ([bundleName isEqualToString:@"com.atebits.Tweetie2"]) { + %init(TwitterHook); + } else if ([bundleName isEqualToString:@"com.facebook.Facebook"]) { + %init(FacebookHook); + } + } + } + [pool drain]; +} diff --git a/samples/Logos/string1.x b/samples/Logos/string1.x new file mode 100644 index 00000000..ff4b3c41 --- /dev/null +++ b/samples/Logos/string1.x @@ -0,0 +1,5 @@ +# APPLE LOCAL file string workaround 4943900 +if { [istarget "*-*-darwin\[9123\]*"] } { + set additional_flags "-framework Foundation -fconstant-cfstrings" +} +return 0 diff --git a/samples/RPC/rpc.x b/samples/RPC/rpc.x new file mode 100644 index 00000000..e19ed409 --- /dev/null +++ b/samples/RPC/rpc.x @@ -0,0 +1,146 @@ +/* rpc.x extracted from RFC5531 */ + +const RPC_VERS = 2; + +enum auth_flavor { + AUTH_NONE = 0, + AUTH_SYS = 1, + AUTH_SHORT = 2, + AUTH_DH = 3, + AUTH_KERB = 4, /* RFC2695 */ + AUTH_RSA = 5, + RPCSEC_GSS = 6 /* RFC2203 */ + /* and more to be defined */ +}; + +typedef opaque opaque_auth_body<400>; + +struct opaque_auth { + int flavor; /* may be "pseudo" value outside enum */ + opaque_auth_body body; +}; + +enum msg_type { + CALL = 0, + REPLY = 1 +}; + +enum reply_stat { + MSG_ACCEPTED = 0, + MSG_DENIED = 1 +}; + +enum accept_stat { + SUCCESS = 0, /* RPC executed successfully */ + PROG_UNAVAIL = 1, /* remote hasn't exported program */ + PROG_MISMATCH = 2, /* remote can't support version # */ + PROC_UNAVAIL = 3, /* program can't support procedure */ + GARBAGE_ARGS = 4, /* procedure can't decode params */ + SYSTEM_ERR = 5 /* e.g. memory allocation failure */ +}; + +enum reject_stat { + RPC_MISMATCH = 0, /* RPC version number != 2 */ + AUTH_ERROR = 1 /* remote can't authenticate caller */ +}; + +enum auth_stat { + AUTH_OK = 0, /* success */ + /* + * failed at remote end + */ + AUTH_BADCRED = 1, /* bad credential (seal broken) */ + AUTH_REJECTEDCRED = 2, /* client must begin new session */ + AUTH_BADVERF = 3, /* bad verifier (seal broken) */ + AUTH_REJECTEDVERF = 4, /* verifier expired or replayed */ + AUTH_TOOWEAK = 5, /* rejected for security reasons */ + /* + * failed locally + */ + AUTH_INVALIDRESP = 6, /* bogus response verifier */ + AUTH_FAILED = 7, /* reason unknown */ + /* + * AUTH_KERB errors; deprecated. See [[139]RFC2695] + */ + AUTH_KERB_GENERIC = 8, /* kerberos generic error */ + AUTH_TIMEEXPIRE = 9, /* time of credential expired */ + AUTH_TKT_FILE = 10, /* problem with ticket file */ + AUTH_DECODE = 11, /* can't decode authenticator */ + AUTH_NET_ADDR = 12, /* wrong net address in ticket */ + /* + * RPCSEC_GSS GSS related errors + */ + RPCSEC_GSS_CREDPROBLEM = 13, /* no credentials for user */ + RPCSEC_GSS_CTXPROBLEM = 14 /* problem with context */ +}; + +struct rpc_msg { + unsigned int xid; + union rpc_msg_body body; +}; + +union rpc_msg_body switch (msg_type mtype) { + case CALL: + call_body cbody; + case REPLY: + reply_body rbody; +}; + +struct call_body { + unsigned int rpcvers; /* must be equal to two (2) */ + unsigned int prog; + unsigned int vers; + unsigned int proc; + opaque_auth cred; + opaque_auth verf; + /* procedure-specific parameters start here */ +}; + +union reply_body switch (reply_stat stat) { + case MSG_ACCEPTED: + accepted_reply areply; + case MSG_DENIED: + rejected_reply rreply; +} /*reply*/; + +struct accepted_reply { + opaque_auth verf; + union accepted_reply_data reply_data; +}; + +union accepted_reply_data switch (accept_stat stat) { + case SUCCESS: + void /* opaque results[0] */; + /* + * procedure-specific results start here + */ + case PROG_MISMATCH: + struct { + unsigned int low; + unsigned int high; + } mismatch_info; + default: + /* + * Void. Cases include PROG_UNAVAIL, PROC_UNAVAIL, + * GARBAGE_ARGS, and SYSTEM_ERR. + */ + void; +}; + +union rejected_reply switch (reject_stat stat) { + case RPC_MISMATCH: + struct { + unsigned int low; + unsigned int high; + } mismatch_info; + case AUTH_ERROR: + auth_stat auth_stat; /* renamed to avoid conflict with discriminator */ +}; + +struct authsys_parms { + unsigned int stamp; + string machinename<255>; + unsigned int uid; + unsigned int gid; + unsigned int gids<16>; +}; diff --git a/samples/RPC/rusers.x b/samples/RPC/rusers.x new file mode 100644 index 00000000..5bbfe97e --- /dev/null +++ b/samples/RPC/rusers.x @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2010, Oracle America, Inc. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * * Neither the name of the "Oracle America, Inc." nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +%/* +% * Find out about remote users +% */ + +const RUSERS_MAXUSERLEN = 32; +const RUSERS_MAXLINELEN = 32; +const RUSERS_MAXHOSTLEN = 257; + +struct rusers_utmp { + string ut_user; /* aka ut_name */ + string ut_line; /* device */ + string ut_host; /* host user logged on from */ + int ut_type; /* type of entry */ + int ut_time; /* time entry was made */ + unsigned int ut_idle; /* minutes idle */ +}; + +typedef rusers_utmp utmp_array<>; + +#ifdef RPC_HDR +% +%/* +% * Values for ut_type field above. +% */ +#endif +const RUSERS_EMPTY = 0; +const RUSERS_RUN_LVL = 1; +const RUSERS_BOOT_TIME = 2; +const RUSERS_OLD_TIME = 3; +const RUSERS_NEW_TIME = 4; +const RUSERS_INIT_PROCESS = 5; +const RUSERS_LOGIN_PROCESS = 6; +const RUSERS_USER_PROCESS = 7; +const RUSERS_DEAD_PROCESS = 8; +const RUSERS_ACCOUNTING = 9; + +program RUSERSPROG { + + version RUSERSVERS_3 { + int + RUSERSPROC_NUM(void) = 1; + + utmp_array + RUSERSPROC_NAMES(void) = 2; + + utmp_array + RUSERSPROC_ALLNAMES(void) = 3; + } = 3; + +} = 100002; + +#ifdef RPC_HDR +% +% +%#ifdef __cplusplus +%extern "C" { +%#endif +% +%#include +% +%/* +% * The following structures are used by version 2 of the rusersd protocol. +% * They were not developed with rpcgen, so they do not appear as RPCL. +% */ +% +%#define RUSERSVERS_IDLE 2 +%#define RUSERSVERS 3 /* current version */ +%#define MAXUSERS 100 +% +%/* +% * This is the structure used in version 2 of the rusersd RPC service. +% * It corresponds to the utmp structure for BSD systems. +% */ +%struct ru_utmp { +% char ut_line[8]; /* tty name */ +% char ut_name[8]; /* user id */ +% char ut_host[16]; /* host name, if remote */ +% long int ut_time; /* time on */ +%}; +% +%struct utmparr { +% struct ru_utmp **uta_arr; +% int uta_cnt; +%}; +%typedef struct utmparr utmparr; +% +%extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW; +% +%struct utmpidle { +% struct ru_utmp ui_utmp; +% unsigned int ui_idle; +%}; +% +%struct utmpidlearr { +% struct utmpidle **uia_arr; +% int uia_cnt; +%}; +% +%extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW; +% +%#ifdef __cplusplus +%} +%#endif +#endif + + +#ifdef RPC_XDR +%bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp); +% +%bool_t +%xdr_utmp (XDR *xdrs, struct ru_utmp *objp) +%{ +% /* Since the fields are char foo [xxx], we should not free them. */ +% if (xdrs->x_op != XDR_FREE) +% { +% char *ptr; +% unsigned int size; +% ptr = objp->ut_line; +% size = sizeof (objp->ut_line); +% if (!xdr_bytes (xdrs, &ptr, &size, size)) { +% return (FALSE); +% } +% ptr = objp->ut_name; +% size = sizeof (objp->ut_name); +% if (!xdr_bytes (xdrs, &ptr, &size, size)) { +% return (FALSE); +% } +% ptr = objp->ut_host; +% size = sizeof (objp->ut_host); +% if (!xdr_bytes (xdrs, &ptr, &size, size)) { +% return (FALSE); +% } +% } +% if (!xdr_long(xdrs, &objp->ut_time)) { +% return (FALSE); +% } +% return (TRUE); +%} +% +%bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp); +% +%bool_t +%xdr_utmpptr (XDR *xdrs, struct ru_utmp **objpp) +%{ +% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp), +% (xdrproc_t) xdr_utmp)) { +% return (FALSE); +% } +% return (TRUE); +%} +% +%bool_t +%xdr_utmparr (XDR *xdrs, struct utmparr *objp) +%{ +% if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt, +% MAXUSERS, sizeof(struct ru_utmp *), +% (xdrproc_t) xdr_utmpptr)) { +% return (FALSE); +% } +% return (TRUE); +%} +% +%bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp); +% +%bool_t +%xdr_utmpidle (XDR *xdrs, struct utmpidle *objp) +%{ +% if (!xdr_utmp(xdrs, &objp->ui_utmp)) { +% return (FALSE); +% } +% if (!xdr_u_int(xdrs, &objp->ui_idle)) { +% return (FALSE); +% } +% return (TRUE); +%} +% +%bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp); +% +%bool_t +%xdr_utmpidleptr (XDR *xdrs, struct utmpidle **objpp) +%{ +% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle), +% (xdrproc_t) xdr_utmpidle)) { +% return (FALSE); +% } +% return (TRUE); +%} +% +%bool_t +%xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) +%{ +% if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt, +% MAXUSERS, sizeof(struct utmpidle *), +% (xdrproc_t) xdr_utmpidleptr)) { +% return (FALSE); +% } +% return (TRUE); +%} +#endif diff --git a/samples/RPC/yp.x b/samples/RPC/yp.x new file mode 100644 index 00000000..269ae6f6 --- /dev/null +++ b/samples/RPC/yp.x @@ -0,0 +1,311 @@ +/* @(#)yp.x 2.1 88/08/01 4.0 RPCSRC */ + +/* + * Copyright (c) 2010, Oracle America, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * * Neither the name of the "Oracle America, Inc." nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Protocol description file for the Yellow Pages Service + */ + +const YPMAXRECORD = 1024; +const YPMAXDOMAIN = 64; +const YPMAXMAP = 64; +const YPMAXPEER = 64; + + +enum ypstat { + YP_TRUE = 1, + YP_NOMORE = 2, + YP_FALSE = 0, + YP_NOMAP = -1, + YP_NODOM = -2, + YP_NOKEY = -3, + YP_BADOP = -4, + YP_BADDB = -5, + YP_YPERR = -6, + YP_BADARGS = -7, + YP_VERS = -8 +}; + + +enum ypxfrstat { + YPXFR_SUCC = 1, + YPXFR_AGE = 2, + YPXFR_NOMAP = -1, + YPXFR_NODOM = -2, + YPXFR_RSRC = -3, + YPXFR_RPC = -4, + YPXFR_MADDR = -5, + YPXFR_YPERR = -6, + YPXFR_BADARGS = -7, + YPXFR_DBM = -8, + YPXFR_FILE = -9, + YPXFR_SKEW = -10, + YPXFR_CLEAR = -11, + YPXFR_FORCE = -12, + YPXFR_XFRERR = -13, + YPXFR_REFUSED = -14 +}; + + +typedef string domainname; +typedef string mapname; +typedef string peername; +typedef opaque keydat; +typedef opaque valdat; + + +struct ypmap_parms { + domainname domain; + mapname map; + unsigned int ordernum; + peername peer; +}; + +struct ypreq_key { + domainname domain; + mapname map; + keydat key; +}; + +struct ypreq_nokey { + domainname domain; + mapname map; +}; + +struct ypreq_xfr { + ypmap_parms map_parms; + unsigned int transid; + unsigned int prog; + unsigned int port; +}; + + +struct ypresp_val { + ypstat stat; + valdat val; +}; + +struct ypresp_key_val { + ypstat stat; +#ifdef STUPID_SUN_BUG + /* This is the form as distributed by Sun. But even the Sun NIS + servers expect the values in the other order. So their + implementation somehow must change the order internally. We + don't want to follow this bad example since the user should be + able to use rpcgen on this file. */ + keydat key; + valdat val; +#else + valdat val; + keydat key; +#endif +}; + + +struct ypresp_master { + ypstat stat; + peername peer; +}; + +struct ypresp_order { + ypstat stat; + unsigned int ordernum; +}; + +union ypresp_all switch (bool more) { +case TRUE: + ypresp_key_val val; +case FALSE: + void; +}; + +struct ypresp_xfr { + unsigned int transid; + ypxfrstat xfrstat; +}; + +struct ypmaplist { + mapname map; + ypmaplist *next; +}; + +struct ypresp_maplist { + ypstat stat; + ypmaplist *maps; +}; + +enum yppush_status { + YPPUSH_SUCC = 1, /* Success */ + YPPUSH_AGE = 2, /* Master's version not newer */ + YPPUSH_NOMAP = -1, /* Can't find server for map */ + YPPUSH_NODOM = -2, /* Domain not supported */ + YPPUSH_RSRC = -3, /* Local resource alloc failure */ + YPPUSH_RPC = -4, /* RPC failure talking to server */ + YPPUSH_MADDR = -5, /* Can't get master address */ + YPPUSH_YPERR = -6, /* YP server/map db error */ + YPPUSH_BADARGS = -7, /* Request arguments bad */ + YPPUSH_DBM = -8, /* Local dbm operation failed */ + YPPUSH_FILE = -9, /* Local file I/O operation failed */ + YPPUSH_SKEW = -10, /* Map version skew during transfer */ + YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */ + YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */ + YPPUSH_XFRERR = -13, /* ypxfr error */ + YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */ +}; + +struct yppushresp_xfr { + unsigned transid; + yppush_status status; +}; + +/* + * Response structure and overall result status codes. Success and failure + * represent two separate response message types. + */ + +enum ypbind_resptype { + YPBIND_SUCC_VAL = 1, + YPBIND_FAIL_VAL = 2 +}; + +struct ypbind_binding { + opaque ypbind_binding_addr[4]; /* In network order */ + opaque ypbind_binding_port[2]; /* In network order */ +}; + +union ypbind_resp switch (ypbind_resptype ypbind_status) { +case YPBIND_FAIL_VAL: + unsigned ypbind_error; +case YPBIND_SUCC_VAL: + ypbind_binding ypbind_bindinfo; +}; + +/* Detailed failure reason codes for response field ypbind_error*/ + +const YPBIND_ERR_ERR = 1; /* Internal error */ +const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ +const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ + + +/* + * Request data structure for ypbind "Set domain" procedure. + */ +struct ypbind_setdom { + domainname ypsetdom_domain; + ypbind_binding ypsetdom_binding; + unsigned ypsetdom_vers; +}; + + +/* + * YP access protocol + */ +program YPPROG { + version YPVERS { + void + YPPROC_NULL(void) = 0; + + bool + YPPROC_DOMAIN(domainname) = 1; + + bool + YPPROC_DOMAIN_NONACK(domainname) = 2; + + ypresp_val + YPPROC_MATCH(ypreq_key) = 3; + + ypresp_key_val + YPPROC_FIRST(ypreq_key) = 4; + + ypresp_key_val + YPPROC_NEXT(ypreq_key) = 5; + + ypresp_xfr + YPPROC_XFR(ypreq_xfr) = 6; + + void + YPPROC_CLEAR(void) = 7; + + ypresp_all + YPPROC_ALL(ypreq_nokey) = 8; + + ypresp_master + YPPROC_MASTER(ypreq_nokey) = 9; + + ypresp_order + YPPROC_ORDER(ypreq_nokey) = 10; + + ypresp_maplist + YPPROC_MAPLIST(domainname) = 11; + } = 2; +} = 100004; + + +/* + * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR + */ +program YPPUSH_XFRRESPPROG { + version YPPUSH_XFRRESPVERS { + void + YPPUSHPROC_NULL(void) = 0; + +#ifdef STUPID_SUN_BUG + /* This is the form as distributed by Sun. But even + the Sun NIS servers expect the values in the other + order. So their implementation somehow must change + the order internally. We don't want to follow this + bad example since the user should be able to use + rpcgen on this file. */ + yppushresp_xfr + YPPUSHPROC_XFRRESP(void) = 1; +#else + void + YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1; +#endif + } = 1; +} = 0x40000000; /* transient: could be anything up to 0x5fffffff */ + +/* + * YP binding protocol + */ +program YPBINDPROG { + version YPBINDVERS { + void + YPBINDPROC_NULL(void) = 0; + + ypbind_resp + YPBINDPROC_DOMAIN(domainname) = 1; + + void + YPBINDPROC_SETDOM(ypbind_setdom) = 2; + } = 2; +} = 100007; diff --git a/vendor/README.md b/vendor/README.md index 810458a0..20fc2131 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -313,6 +313,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting - **RobotFramework:** [shellderp/sublime-robot-plugin](https://github.com/shellderp/sublime-robot-plugin) - **Roff:** [Alhadis/language-roff](https://github.com/Alhadis/language-roff) - **Rouge:** [atom/language-clojure](https://github.com/atom/language-clojure) +- **RPC:** [textmate/c.tmbundle](https://github.com/textmate/c.tmbundle) - **RPM Spec:** [waveclaw/language-rpm-spec](https://github.com/waveclaw/language-rpm-spec) - **Ruby:** [atom/language-ruby](https://github.com/atom/language-ruby) - **RUNOFF:** [Alhadis/language-roff](https://github.com/Alhadis/language-roff)