Add .x as XDR/RPCGEN (#3472)
* Add .x as XDR/RPCGEN XDR/RPC language as documented in RFC5531, RFC4506. Samples are from glibc and RFCs. * Add Logos samples https://github.com/JonasGessner/NoCarrier/blob/master/NoCarrier.x - MITcf31f4e466/llvm-gcc-R3/gcc/testsuite/objc/execute/string1.x
- GPL2f6415578fa/perapp-plugin/Tweak.x
- GPL3d1b3e83888/NCHax.x
- Apache * Add disambiguate heuristics for .x * Add RPC to vendor/README.md
This commit is contained in:
Родитель
8da6ddf9d9
Коммит
60f748d47b
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
#import <UIKit/UIKit.h>
|
||||
#import <BulletinBoard/BBSectionInfo.h>
|
||||
#import <UIKit/UIImage+Private.h>
|
||||
#import <version.h>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
//
|
||||
// NoCarrier.x
|
||||
// NoCarrier
|
||||
//
|
||||
// Created by Jonas Gessner on 27.01.2014.
|
||||
// Copyright (c) 2014 Jonas Gessner. All rights reserved.
|
||||
//
|
||||
|
||||
#import <CoreGraphics/CoreGraphics.h>
|
||||
|
||||
#include <substrate.h>
|
||||
|
||||
%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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,239 @@
|
|||
/*
|
||||
* ShadowSocks Per-App Proxy Plugin
|
||||
* https://github.com/linusyang/MobileShadowSocks
|
||||
*
|
||||
* Copyright (c) 2014 Linus Yang <laokongzi@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <UIKit/UIKit.h>
|
||||
#include <libfinder/LFFinderController.h>
|
||||
|
||||
#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 <LFFinderActionDelegate>
|
||||
|
||||
- (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];
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
# APPLE LOCAL file string workaround 4943900
|
||||
if { [istarget "*-*-darwin\[9123\]*"] } {
|
||||
set additional_flags "-framework Foundation -fconstant-cfstrings"
|
||||
}
|
||||
return 0
|
|
@ -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>;
|
||||
};
|
|
@ -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<RUSERS_MAXUSERLEN>; /* aka ut_name */
|
||||
string ut_line<RUSERS_MAXLINELEN>; /* device */
|
||||
string ut_host<RUSERS_MAXHOSTLEN>; /* 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 <rpc/xdr.h>
|
||||
%
|
||||
%/*
|
||||
% * 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
|
|
@ -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<YPMAXDOMAIN>;
|
||||
typedef string mapname<YPMAXMAP>;
|
||||
typedef string peername<YPMAXPEER>;
|
||||
typedef opaque keydat<YPMAXRECORD>;
|
||||
typedef opaque valdat<YPMAXRECORD>;
|
||||
|
||||
|
||||
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;
|
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче