本文整理汇总了C++中MyString类的典型用法代码示例。如果您正苦于以下问题:C++ MyString类的具体用法?C++ MyString怎么用?C++ MyString使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MyString类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dprintf
int DockerAPI::detect( CondorError & err ) {
// FIXME: Remove ::version() as a public API and return it from here,
// because there's no point in doing this twice.
std::string version;
int rval = DockerAPI::version( version, err );
if( rval != 0 ) {
dprintf(D_ALWAYS, "DockerAPI::detect() failed to detect the Docker version; assuming absent.\n" );
return -4;
}
ArgList infoArgs;
if ( ! add_docker_arg(infoArgs))
return -1;
infoArgs.AppendArg( "info" );
MyString displayString;
infoArgs.GetArgsStringForLogging( & displayString );
dprintf( D_FULLDEBUG, "Attempting to run: '%s'.\n", displayString.c_str() );
#if 1
MyPopenTimer pgm;
if (pgm.start_program(infoArgs, true, NULL, false) < 0) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to run '%s'.\n", displayString.c_str() );
return -2;
}
int exitCode;
if ( ! pgm.wait_for_exit(default_timeout, &exitCode) || exitCode != 0) {
pgm.close_program(1);
MyString line;
line.readLine(pgm.output(), false); line.chomp();
dprintf( D_ALWAYS, "'%s' did not exit successfully (code %d); the first line of output was '%s'.\n", displayString.c_str(), exitCode, line.c_str());
return -3;
}
if (IsFulldebug(D_ALWAYS)) {
MyString line;
do {
line.readLine(pgm.output(), false);
line.chomp();
dprintf( D_FULLDEBUG, "[docker info] %s\n", line.c_str() );
} while (line.readLine(pgm.output(), false));
}
#else
FILE * dockerResults = my_popen( infoArgs, "r", 1 , 0, false);
if( dockerResults == NULL ) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to run '%s'.\n", displayString.c_str() );
return -2;
}
// Even if we don't care about the success output, the failure output
// can be handy for debugging...
char buffer[1024];
std::vector< std::string > output;
while( fgets( buffer, 1024, dockerResults ) != NULL ) {
size_t end = strlen(buffer);
if (end > 0 && buffer[end-1] == '\n') { buffer[end-1] = '\0'; }
output.push_back( buffer );
}
for( unsigned i = 0; i < output.size(); ++i ) {
dprintf( D_FULLDEBUG, "[docker info] %s\n", output[i].c_str() );
}
int exitCode = my_pclose( dockerResults );
if( exitCode != 0 ) {
dprintf( D_ALWAYS, "'%s' did not exit successfully (code %d); the first line of output was '%s'.\n", displayString.c_str(), exitCode, output[0].c_str() );
return -3;
}
#endif
return 0;
}
示例2: systemCommand
/**
* merge_stderr_with_stdout is intended for clients of this function
* that wish to have the old behavior, where stderr and stdout were
* both added to the same StringList.
*/
int systemCommand( ArgList &args, priv_state priv, StringList *cmd_out, StringList * cmd_in,
StringList *cmd_err, bool merge_stderr_with_stdout)
{
int result = 0;
FILE *fp = NULL;
FILE * fp_for_stdin = NULL;
FILE * childerr = NULL;
MyString line;
char buff[1024];
StringList *my_cmd_out = cmd_out;
priv_state prev = get_priv_state();
int stdout_pipes[2];
int stdin_pipes[2];
int pid;
bool use_privsep = false;
switch ( priv ) {
case PRIV_ROOT:
prev = set_root_priv();
break;
case PRIV_USER:
case PRIV_USER_FINAL:
prev = set_user_priv();
#if !defined(WIN32)
if ( privsep_enabled() && (job_user_uid != get_condor_uid()) ) {
use_privsep = true;
}
#endif
break;
default:
// Stay as Condor user, this should be a no-op
prev = set_condor_priv();
}
#if defined(WIN32)
if((cmd_in != NULL) || (cmd_err != NULL))
{
vmprintf(D_ALWAYS, "Invalid use of systemCommand() in Windows.\n");
set_priv( prev );
return -1;
}
//if ( use_privsep ) {
// fp = privsep_popen(args, "r", want_stderr, job_user_uid);
//}
//else {
fp = my_popen( args, "r", merge_stderr_with_stdout ? MY_POPEN_OPT_WANT_STDERR : 0 );
//}
#else
// The old way of doing things (and the Win32 way of doing
// things)
// fp = my_popen( args, "r", want_stderr ? MY_POPEN_OPT_WANT_STDERR : 0 );
if((cmd_err != NULL) && merge_stderr_with_stdout)
{
vmprintf(D_ALWAYS, "Invalid use of systemCommand().\n");
set_priv( prev );
return -1;
}
PrivSepForkExec psforkexec;
char ** args_array = args.GetStringArray();
int error_pipe[2];
// AIX 5.2, Solaris 5.9, HPUX 11 don't have AF_LOCAL
if(pipe(stdin_pipes) < 0)
{
vmprintf(D_ALWAYS, "Error creating pipe: %s\n", strerror(errno));
deleteStringArray( args_array );
set_priv( prev );
return -1;
}
if(pipe(stdout_pipes) < 0)
{
vmprintf(D_ALWAYS, "Error creating pipe: %s\n", strerror(errno));
close(stdin_pipes[0]);
close(stdin_pipes[1]);
deleteStringArray( args_array );
set_priv( prev );
return -1;
}
if ( use_privsep ) {
if(!psforkexec.init())
{
vmprintf(D_ALWAYS,
"my_popenv failure on %s\n",
args_array[0]);
close(stdin_pipes[0]);
close(stdin_pipes[1]);
close(stdout_pipes[0]);
close(stdout_pipes[1]);
deleteStringArray( args_array );
set_priv( prev );
return -1;
}
}
//.........这里部分代码省略.........
示例3: TEST
TEST(MyString, CopyConstructor) {
const MyString s1(kHelloString);
const MyString s2 = s1;
EXPECT_EQ(0, strcmp(s2.c_string(), kHelloString));
}
示例4: debug_printf
// Note: for this to work correctly, it's vital that the events we generate
// in recovery mode exactly match how they were output in "non-recovery"
// mode, so we can compare timestamps, and, if the timestamp matches
// the last pre-recovery timestamp, the entire event string.
void
JobstateLog::InitializeRecovery()
{
debug_printf( DEBUG_DEBUG_2, "JobstateLog::InitializeRecovery()\n" );
if ( !_jobstateLogFile ) {
return;
}
//
// Find the timestamp of the last "real" event written to the
// jobstate.log file. Any events that we see in recovery mode
// that have an earlier timestamp should *not* be re-written
// to the jobstate.log file. Any events with later timestamps
// should be written. Events with equal timestamps need to be
// tested individually.
//
FILE *infile = safe_fopen_wrapper_follow( _jobstateLogFile, "r" );
if ( !infile ) {
// This is a fatal error, because by the time we get here,
// we should, at the very least, have written the
// DAGMAN_STARTED "event".
debug_printf( DEBUG_QUIET,
"Could not open jobstate log file %s for reading.\n",
_jobstateLogFile );
main_shutdown_graceful();
return;
}
MyString line;
off_t startOfLastTimestamp = 0;
while ( true ) {
off_t currentOffset = ftell( infile );
if ( !line.readLine( infile ) ) {
break;
}
time_t newTimestamp;
MyString nodeName;
int seqNum;
if ( ParseLine( line, newTimestamp, nodeName, seqNum ) ) {
// We don't want to look at "INTERNAL" events here, or we'll
// get goofed up by our own DAGMAN_STARTED event, etc.
if ( nodeName != INTERNAL_NAME ) {
// Note: we don't absolutely rely on the timestamps
// being in order -- the > below rather than == is
// important in that case.
if ( newTimestamp > _lastTimestampWritten ) {
startOfLastTimestamp = currentOffset;
_lastTimestampWritten = newTimestamp;
}
}
}
}
debug_printf( DEBUG_DEBUG_2, "_lastTimestampWritten: %lu\n",
(unsigned long)_lastTimestampWritten );
//
// Now find all lines that match the last timestamp, and put
// them into a hash table for future reference.
//
if ( fseek( infile, startOfLastTimestamp, SEEK_SET ) != 0 ) {
debug_printf( DEBUG_QUIET,
"Error seeking in jobstate log file %s.\n",
_jobstateLogFile );
}
while ( line.readLine( infile ) ) {
time_t newTimestamp;
MyString nodeName;
int seqNum;
if ( ParseLine( line, newTimestamp, nodeName, seqNum ) ) {
if ( (newTimestamp == _lastTimestampWritten) &&
(nodeName != INTERNAL_NAME) ) {
_lastTimestampLines.insert( line );
debug_printf( DEBUG_DEBUG_2,
"Appended <%s> to _lastTimestampLines\n",
line.Value() );
}
}
}
fclose( infile );
}
示例5: vmapi_findDaemon
void
VMRegister::requestHostClassAds(void)
{
// find host startd daemon
if( !m_vm_host_daemon )
m_vm_host_daemon = vmapi_findDaemon( m_vm_host_name, DT_STARTD);
if( !m_vm_host_daemon ) {
dprintf( D_FULLDEBUG, "Can't find host(%s) Startd daemon\n", m_vm_host_name );
return;
}
ClassAd query_ad;
query_ad.SetMyTypeName(QUERY_ADTYPE);
query_ad.SetTargetTypeName(STARTD_ADTYPE);
query_ad.Assign(ATTR_REQUIREMENTS, true);
char *addr = m_vm_host_daemon->addr();
Daemon hstartd(DT_STARTD, addr);
ReliSock ssock;
ssock.timeout( VM_SOCKET_TIMEOUT );
ssock.encode();
if( !ssock.connect(addr) ) {
dprintf( D_FULLDEBUG, "Failed to connect to host startd(%s)\n to get host classAd", addr);
return;
}
if(!hstartd.startCommand( QUERY_STARTD_ADS, &ssock )) {
dprintf( D_FULLDEBUG, "Failed to send QUERY_STARTD_ADS command to host startd(%s)\n", addr);
return;
}
if( !query_ad.put(ssock) ) {
dprintf(D_FULLDEBUG, "Failed to send query Ad to host startd(%s)\n", addr);
}
if( !ssock.end_of_message() ) {
dprintf(D_FULLDEBUG, "Failed to send query EOM to host startd(%s)\n", addr);
}
// Read host classAds
ssock.timeout( VM_SOCKET_TIMEOUT );
ssock.decode();
int more = 1, num_ads = 0;
ClassAdList adList;
ClassAd *ad;
while (more) {
if( !ssock.code(more) ) {
ssock.end_of_message();
return;
}
if(more) {
ad = new ClassAd;
if( !ad->initFromStream(ssock) ) {
ssock.end_of_message();
delete ad;
return;
}
adList.Insert(ad);
num_ads++;
}
}
ssock.end_of_message();
dprintf(D_FULLDEBUG, "Got %d classAds from host\n", num_ads);
// Although we can get more than one classAd from host machine,
// we use only the first one classAd
adList.Rewind();
ad = adList.Next();
#if !defined(WANT_OLD_CLASSADS)
ad->AddTargetRefs( TargetJobAttrs );
#endif
// Get each Attribute from the classAd
// added "HOST_" in front of each Attribute name
const char *name;
ExprTree *expr;
ad->ResetExpr();
while( ad->NextExpr(name, expr) ) {
MyString attr;
attr += "HOST_";
attr += name;
// Insert or Update an attribute to host_classAd in a VMRegister object
ExprTree * pTree = expr->Copy();
host_classad->Insert(attr.Value(), pTree, true);
}
}
示例6: test_tokener_parse_realistic
static bool test_tokener_parse_realistic() {
emit_test("Test realistic tokener parsing functions");
MyString msg;
std::string temp;
std::set<std::string> attrs;
std::set<std::string> labels;
std::set<std::string> formats;
StringLiteralInputStream lines(
"# blackhole.cpf\n"
"# show static slots with high job churn\n"
"SELECT\n"
" Machine WIDTH -24 \n"
" splitslotname(Name)[0] AS Slot WIDTH -8\n"
" Strcat(Arch,\"_\",IfThenElse(OpSys==\"WINDOWS\",OpSysShortName,OpSysName)) AS Platform\n"
" Cpus AS CPU\n"
" Memory PRINTF \"%6d\" AS Mem\n"
" Strcat(State,\"/\",Activity) AS Status WIDTH -14 TRUNCATE\n"
" EnteredCurrentActivity AS ' StatusTime' PRINTAS ACTIVITY_TIME NOPREFIX\n"
" IfThenElse(JobId isnt undefined, JobId, \"no\") AS JobId WIDTH -11\n"
" RecentJobStarts/20.0 AS J/Min PRINTF %.2f\n"
"WHERE RecentJobStarts >= 1 && PartitionableSlot =!= true && DynamicSlot =!= true\n"
"SUMMARY \n"
);
tokener toke("");
int state = 0;
while (toke.set(lines.nextline())) {
REQUIRE(toke.next());
if (toke.starts_with("#")) {
REQUIRE(toke.next() && (toke.matches("blackhole.cpf") || toke.matches("show")));
continue;
}
const TestTableItem * ti = Keywords.lookup_token(toke);
if (ti) {
if (ti->id == item_SELECT) { REQUIRE(state == 0 && ! toke.next()); state = ti->id; continue; }
else if (ti->id == item_WHERE) { REQUIRE(state == item_SELECT); }
else if (ti->id == item_SUMMARY) { REQUIRE(state == item_WHERE); }
else {
emit_step_failure(__LINE__, "invalid transition");
}
state = ti->id;
}
switch (state) {
default:
emit_step_failure(__LINE__, "invalid state");
break;
case item_WHERE:
REQUIRE(toke.next());
toke.copy_to_end(temp);
REQUIRE(temp == "RecentJobStarts >= 1 && PartitionableSlot =!= true && DynamicSlot =!= true");
break;
case item_SUMMARY:
REQUIRE(!toke.next());
break;
case item_SELECT:
toke.mark();
bool got_attr = false;
while (toke.next()) {
ti = Keywords.lookup_token(toke);
REQUIRE(!ti || ti->index > 1);
if (ti && ! got_attr) {
toke.copy_marked(temp);
trim(temp);
attrs.insert(temp);
got_attr = true;
} else if ( ! ti && got_attr) {
msg = "invalid token at: ";
msg += (toke.content().c_str() + toke.offset());
emit_step_failure(__LINE__, msg.c_str());
}
if ( ! ti) continue;
switch (ti->id) {
case item_AS:
REQUIRE(toke.next()); toke.copy_token(temp);
labels.insert(temp);
toke.mark_after();
break;
case item_PRINTF:
case item_PRINTAS:
case item_WIDTH:
REQUIRE(toke.next()); toke.copy_token(temp);
formats.insert(temp);
break;
}
}
break;
}
}
std::set<std::string>::const_iterator it;
it = attrs.begin();
REQUIRE(*it++ == "Cpus");
REQUIRE(*it++ == "EnteredCurrentActivity");
REQUIRE(*it++ == "IfThenElse(JobId isnt undefined, JobId, \"no\")");
REQUIRE(*it++ == "Machine");
REQUIRE(*it++ == "Memory");
REQUIRE(*it++ == "RecentJobStarts/20.0");
REQUIRE(*it++ == "Strcat(Arch,\"_\",IfThenElse(OpSys==\"WINDOWS\",OpSysShortName,OpSysName))");
//.........这里部分代码省略.........
示例7: QueryHotPaths
void MYRTLEXP QueryHotPaths( PHotPathArray arr )
{
arr->DeleteAll();
#if defined(__QNX__)
int num_nids;
char node_name[22];
char buffer[ 500 ];
char str[100];
struct _osinfo osi;
if ( (num_nids=qnx_net_alive(buffer,sizeof(buffer))) == -1)
return;
for( int n = 1; n < num_nids+1; n++) {
if ( !buffer[n] ||
qnx_osinfo( n,&osi ) == -1 )
continue;
qnx_nidtostr( n, node_name, sizeof(node_name));
SNprintf( str, sizeof(str), "//%ld/ ~%-6s~ CPU:~%3u~-~%3d~/~%3d~ Ver:~%2d.%02d%c~ Mem:~%d~/~%d~",
osi.nodename,
osi.machine, osi.cpu, osi.fpu,
osi.cpu_speed, osi.version/100, osi.version%100, osi.release,
osi.freememk, osi.totmemk );
PHotPathEntry pe = arr->Add( new HotPathEntry );
pe->Path.printf( "//%s/", node_name );
pe->Label.printf( " ~%c~ ³",'A'+n-1 );
pe->Description = str;
}
#else
#if defined(__HDOS__)
int count,c,old;
char astr[] = "X:\\",
str[] = "X";
count = setdisk( old = getdisk() );
for ( c = 0; c < count; c++ ) {
if ( _chdrive(c+1) != 0 )
continue;
astr[0] = (char)('A'+c);
astr[0] = (char)('A'+c);
CONSTSTR d;
switch( GetDiskType( c+1 ) ) {
case DRIVE_CDROM: d = "CD-ROM drive"; break;
case DRIVE_RAMDISK: d = "RAM drive"; break;
case DRIVE_REMOTE: d = "Remote drive"; break;
case DRIVE_FIXED: d = "Hard drive"; break;
case DRIVE_REMOVABLE: d = "Removable drive"; break;
case DRIVE_SUBST: d = "Subst drive"; break;
case DRIVE_DBLSPACE: d = "DblSpace drive"; break;
default: d = NULL;
}
if ( d ) {
MyString s;
s.printf( " ~%s~ ¦", str );
arr->Add( new HotPathEntry( astr, s, d ) );
}
}
setdisk( old );
#else
#if defined(__HWIN32__)
DWORD dw = GetLogicalDrives();
UINT type;
char astr[] = "X:\\",
str[] = "X";
for ( int n = 0; n < 32; n++ ) {
astr[0] = (char)('A'+n);
str[0] = (char)('A'+n);
if ( (dw & (1UL<<n)) == 0 || (type=GetDriveType(astr)) <= 1 )
continue;
CONSTSTR d;
switch( type ) {
case DRIVE_CDROM: d = "CD-ROM drive"; break;
case DRIVE_RAMDISK: d = "RAM drive"; break;
case DRIVE_REMOTE: d = "Remote drive"; break;
case DRIVE_FIXED: d = "Hard drive"; break;
case DRIVE_REMOVABLE: d = "Removable drive"; break;
default: d = NULL;
}
if ( d ) {
MyString s;
s.printf( " ~%s~ ¦", str );
arr->Add( new HotPathEntry( astr, s, d ) );
}
}
#else
#if defined(__HWIN16__)
UINT type;
char astr[] = "X:\\",
str[] = "X";
for ( int n = 0; n < 26; n++ ) {
if ( (type=GetDriveType(n)) == 1 )
continue;
//.........这里部分代码省略.........
示例8: dprintf
int
OsProc::StartJob(FamilyInfo* family_info, NetworkNamespaceManager * network_manager = NULL, FilesystemRemap* fs_remap=NULL)
{
int nice_inc = 0;
bool has_wrapper = false;
dprintf(D_FULLDEBUG,"in OsProc::StartJob()\n");
if ( !JobAd ) {
dprintf ( D_ALWAYS, "No JobAd in OsProc::StartJob()!\n" );
return 0;
}
MyString JobName;
if ( JobAd->LookupString( ATTR_JOB_CMD, JobName ) != 1 ) {
dprintf( D_ALWAYS, "%s not found in JobAd. Aborting StartJob.\n",
ATTR_JOB_CMD );
return 0;
}
const char* job_iwd = Starter->jic->jobRemoteIWD();
dprintf( D_ALWAYS, "IWD: %s\n", job_iwd );
// some operations below will require a PrivSepHelper if
// PrivSep is enabled (if it's not, privsep_helper will be
// NULL)
PrivSepHelper* privsep_helper = Starter->privSepHelper();
// // // // // //
// Arguments
// // // // // //
// prepend the full path to this name so that we
// don't have to rely on the PATH inside the
// USER_JOB_WRAPPER or for exec().
bool transfer_exe = false;
if (!JobAd->LookupBool(ATTR_TRANSFER_EXECUTABLE, transfer_exe)) {
transfer_exe = false;
}
bool preserve_rel = false;
if (!JobAd->LookupBool(ATTR_PRESERVE_RELATIVE_EXECUTABLE, preserve_rel)) {
preserve_rel = false;
}
bool relative_exe = is_relative_to_cwd(JobName.Value());
if (relative_exe && preserve_rel && !transfer_exe) {
dprintf(D_ALWAYS, "Preserving relative executable path: %s\n", JobName.Value());
}
else if ( strcmp(CONDOR_EXEC,JobName.Value()) == 0 ) {
JobName.sprintf( "%s%c%s",
Starter->GetWorkingDir(),
DIR_DELIM_CHAR,
CONDOR_EXEC );
}
else if (relative_exe && job_iwd && *job_iwd) {
MyString full_name;
full_name.sprintf("%s%c%s",
job_iwd,
DIR_DELIM_CHAR,
JobName.Value());
JobName = full_name;
}
if( Starter->isGridshell() ) {
// if we're a gridshell, just try to chmod our job, since
// globus probably transfered it for us and left it with
// bad permissions...
priv_state old_priv = set_user_priv();
int retval = chmod( JobName.Value(), S_IRWXU | S_IRWXO | S_IRWXG );
set_priv( old_priv );
if( retval < 0 ) {
dprintf ( D_ALWAYS, "Failed to chmod %s!\n", JobName.Value() );
return 0;
}
}
ArgList args;
// Since we may be adding to the argument list, we may need to deal
// with platform-specific arg syntax in the user's args in order
// to successfully merge them with the additional wrapper args.
args.SetArgV1SyntaxToCurrentPlatform();
// First, put "condor_exec" or whatever at the front of Args,
// since that will become argv[0] of what we exec(), either
// the wrapper or the actual job.
if( !getArgv0() ) {
args.AppendArg(JobName.Value());
} else {
args.AppendArg(getArgv0());
}
// Support USER_JOB_WRAPPER parameter...
char *wrapper = NULL;
if( (wrapper=param("USER_JOB_WRAPPER")) ) {
//.........这里部分代码省略.........
示例9: AddLastSlash
//---------------------------------------------------------------------------
MyString MYRTLEXP AddLastSlash( MyString& path, char Slash )
{
if ( path.Length() && path[ path.Length()-1 ] != Slash )
path.Add( Slash );
return path;
}
示例10: main
int
main( int argc, char* argv[] )
{
int i;
param_functions *p_funcs = NULL;
set_mySubSystem( "DAEMON-TOOL", SUBSYSTEM_TYPE_TOOL );
MyName = argv[0];
myDistro->Init( argc, argv );
FILE *input_fp = stdin;
for( i=1; i<argc; i++ ) {
if( match_prefix( argv[i], "-daemontype" ) ) {
if( argv[i + 1] ) {
get_mySubSystem()->setName( argv[++i] );
get_mySubSystem()->setTypeFromName( );
} else {
usage();
}
} else if( match_prefix( argv[i], "-debug" ) ) {
// dprintf to console
Termlog = 1;
p_funcs = get_param_functions();
dprintf_config( "DAEMON-TOOL", p_funcs );
set_debug_flags(NULL, D_FULLDEBUG|D_SECURITY);
} else if( match_prefix( argv[i], "-" ) ) {
usage();
} else {
usage();
}
}
// If we didn't get told what subsystem we should use, set it
// to "TOOL".
if( !get_mySubSystem()->isNameValid() ) {
get_mySubSystem()->setName( "DAEMON-TOOL" );
}
config( 0, true );
IpVerify ipverify;
MyString line;
while( line.readLine(input_fp) ) {
line.chomp();
if( line.IsEmpty() || line[0] == '#' ) {
printf("%s\n",line.Value());
continue;
}
StringList fields(line.Value()," ");
fields.rewind();
char const *perm_str = fields.next();
char const *fqu = fields.next();
char const *ip = fields.next();
char const *expected = fields.next();
MyString sin_str = generate_sinful(ip, 0);
condor_sockaddr addr;
if( !addr.from_sinful(sin_str) ) {
fprintf(stderr,"Invalid ip address: %s\n",ip);
exit(1);
}
DCpermission perm = StringToDCpermission(perm_str);
if( perm == LAST_PERM ) {
fprintf(stderr,"Invalid permission level: %s\n",perm_str);
exit(1);
}
if( strcmp(fqu,"*") == 0 ) {
fqu = "";
}
char const *result;
MyString reason;
if( ipverify.Verify(perm,addr,fqu,&reason,&reason) != USER_AUTH_SUCCESS ) {
result = "DENIED";
}
else {
result = "ALLOWED";
}
if( expected && strcasecmp(expected,result) != 0 ) {
printf("Got wrong result '%s' for '%s': reason: %s!\n",
result,line.Value(),reason.Value());
printf("Aborting.\n");
exit(1);
}
if( expected ) {
printf("%s\n",line.Value());
}
else {
printf("%s %s\n",line.Value(),result);
}
//.........这里部分代码省略.........
示例11: run_simple_docker_command
int
run_simple_docker_command(const std::string &command, const std::string &container, int timeout, CondorError &, bool ignore_output)
{
ArgList args;
if ( ! add_docker_arg(args))
return -1;
args.AppendArg( command );
args.AppendArg( container.c_str() );
MyString displayString;
args.GetArgsStringForLogging( & displayString );
dprintf( D_FULLDEBUG, "Attempting to run: %s\n", displayString.c_str() );
#if 1
MyPopenTimer pgm;
if (pgm.start_program( args, true, NULL, false ) < 0) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to run '%s'.\n", displayString.c_str() );
return -2;
}
if ( ! pgm.wait_and_close(timeout) || pgm.output_size() <= 0) {
int error = pgm.error_code();
if( error ) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to read results from '%s': '%s' (%d)\n", displayString.c_str(), pgm.error_str(), error );
if (pgm.was_timeout()) {
dprintf( D_ALWAYS | D_FAILURE, "Declaring a hung docker\n");
return DockerAPI::docker_hung;
}
} else {
dprintf( D_ALWAYS | D_FAILURE, "'%s' returned nothing.\n", displayString.c_str() );
}
return -3;
}
// On a success, Docker writes the containerID back out.
MyString line;
line.readLine(pgm.output());
line.chomp(); line.trim();
if (!ignore_output && line != container.c_str()) {
// Didn't get back the result I expected, report the error and check to see if docker is hung.
dprintf( D_ALWAYS | D_FAILURE, "Docker %s failed, printing first few lines of output.\n", command.c_str());
for (int ii = 0; ii < 10; ++ii) {
if ( ! line.readLine(pgm.output(), false)) break;
dprintf( D_ALWAYS | D_FAILURE, "%s\n", line.c_str() );
}
return -4;
}
#else
// Read from Docker's combined output and error streams.
FILE * dockerResults = my_popen( args, "r", 1 , 0, false);
if( dockerResults == NULL ) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to run '%s'.\n", displayString.c_str() );
return -2;
}
// On a success, Docker writes the containerID back out.
char buffer[1024];
if( NULL == fgets( buffer, 1024, dockerResults ) ) {
if( errno ) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to read results from '%s': '%s' (%d)\n", displayString.c_str(), strerror( errno ), errno );
} else {
dprintf( D_ALWAYS | D_FAILURE, "'%s' returned nothing.\n", displayString.c_str() );
}
my_pclose( dockerResults );
return -3;
}
size_t length = strlen( buffer );
if (!ignore_output) {
if( length < 1 || strncmp( buffer, container.c_str(), length - 1 ) != 0 ) {
dprintf( D_ALWAYS | D_FAILURE, "Docker %s failed, printing first few lines of output.\n", command.c_str() );
dprintf( D_ALWAYS | D_FAILURE, "%s", buffer );
while( NULL != fgets( buffer, 1024, dockerResults ) ) {
dprintf( D_ALWAYS | D_FAILURE, "%s", buffer );
}
my_pclose( dockerResults );
return -4;
}
}
my_pclose( dockerResults );
#endif
return 0;
}
示例12: main_init
//---------------------------------------------------------------------------
void main_init (int argc, char ** const argv) {
printf ("Executing condor dagman ... \n");
// flag used if DAGMan is invoked with -WaitForDebug so we
// wait for a developer to attach with a debugger...
volatile int wait_for_debug = 0;
// process any config vars -- this happens before we process
// argv[], since arguments should override config settings
dagman.Config();
// The DCpermission (last parm) should probably be PARENT, if it existed
daemonCore->Register_Signal( SIGUSR1, "SIGUSR1",
(SignalHandler) main_shutdown_remove,
"main_shutdown_remove", NULL);
/****** FOR TESTING *******
daemonCore->Register_Signal( SIGUSR2, "SIGUSR2",
(SignalHandler) main_testing_stub,
"main_testing_stub", NULL);
****** FOR TESTING ********/
debug_progname = condor_basename(argv[0]);
// condor_submit_dag version from .condor.sub
bool allowVerMismatch = false;
const char *csdVersion = "undefined";
int i;
for (i = 0 ; i < argc ; i++) {
debug_printf( DEBUG_NORMAL, "argv[%d] == \"%s\"\n", i, argv[i] );
}
if (argc < 2) Usage(); // Make sure an input file was specified
// get dagman job id from environment, if it's there
// (otherwise it will be set to "-1.-1.-1")
dagman.DAGManJobId.SetFromString( getenv( EnvGetName( ENV_ID ) ) );
dagman._dagmanClassad = new DagmanClassad( dagman.DAGManJobId );
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Minimum legal version for a .condor.sub file to be compatible
// with this condor_dagman binary.
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Be sure to change this if the arguments or environment
// passed to condor_dagman change in an incompatible way!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
struct DagVersionData {
int majorVer;
int minorVer;
int subMinorVer;
};
const DagVersionData MIN_SUBMIT_FILE_VERSION = { 7, 1, 2 };
// Construct a string of the minimum submit file version.
MyString minSubmitVersionStr;
minSubmitVersionStr.formatstr( "%d.%d.%d",
MIN_SUBMIT_FILE_VERSION.majorVer,
MIN_SUBMIT_FILE_VERSION.minorVer,
MIN_SUBMIT_FILE_VERSION.subMinorVer );
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Process command-line arguments
//
for (i = 1; i < argc; i++) {
if( !strcasecmp( "-Debug", argv[i] ) ) {
i++;
if( argc <= i || strcmp( argv[i], "" ) == 0 ) {
debug_printf( DEBUG_SILENT, "No debug level specified\n" );
Usage();
}
debug_level = (debug_level_t) atoi (argv[i]);
} else if( !strcasecmp( "-Lockfile", argv[i] ) ) {
i++;
if( argc <= i || strcmp( argv[i], "" ) == 0 ) {
debug_printf( DEBUG_SILENT, "No DagMan lockfile specified\n" );
Usage();
}
lockFileName = argv[i];
} else if( !strcasecmp( "-Help", argv[i] ) ) {
Usage();
} else if (!strcasecmp( "-Dag", argv[i] ) ) {
i++;
if( argc <= i || strcmp( argv[i], "" ) == 0 ) {
debug_printf( DEBUG_SILENT, "No DAG specified\n" );
Usage();
}
dagman.dagFiles.append( argv[i] );
} else if( !strcasecmp( "-MaxIdle", argv[i] ) ) {
i++;
if( argc <= i || strcmp( argv[i], "" ) == 0 ) {
debug_printf( DEBUG_SILENT,
"Integer missing after -MaxIdle\n" );
Usage();
}
//.........这里部分代码省略.........
示例13: return
bool MyString::operator< (const MyString & aMyString)
{
return (*this) < aMyString._cstr();
}
示例14: MapFile
// takes the type (as defined in handshake bitmask, CAUTH_*) and result of authentication,
// and maps it to the cannonical condor name.
//
void Authentication::map_authentication_name_to_canonical_name(int authentication_type, const char* method_string, const char* authentication_name) {
// make sure the mapfile is loaded. it's a static global variable.
if (global_map_file_load_attempted == false) {
if (global_map_file) {
delete global_map_file;
global_map_file = NULL;
}
global_map_file = new MapFile();
dprintf (D_SECURITY, "ZKM: Parsing map file.\n");
char * credential_mapfile;
if (NULL == (credential_mapfile = param("CERTIFICATE_MAPFILE"))) {
dprintf(D_SECURITY, "ZKM: No CERTIFICATE_MAPFILE defined\n");
delete global_map_file;
global_map_file = NULL;
} else {
int line;
if (0 != (line = global_map_file->ParseCanonicalizationFile(credential_mapfile))) {
dprintf(D_SECURITY, "ZKM: Error parsing %s at line %d", credential_mapfile, line);
delete global_map_file;
global_map_file = NULL;
}
free( credential_mapfile );
}
global_map_file_load_attempted = true;
} else {
dprintf (D_SECURITY, "ZKM: map file already loaded.\n");
}
#if defined(HAVE_EXT_GLOBUS)
if (globus_activated == false) {
dprintf (D_FULLDEBUG, "Activating Globus GSI_GSSAPI_ASSIST module.\n");
globus_module_activate(GLOBUS_GSI_GSS_ASSIST_MODULE);
globus_activated = true;
}
#endif
dprintf (D_SECURITY, "ZKM: attempting to map '%s'\n", authentication_name);
// this will hold what we pass to the mapping function
MyString auth_name_to_map = authentication_name;
bool included_voms = false;
#if defined(HAVE_EXT_GLOBUS)
// if GSI, try first with the FQAN (dn plus voms attrs)
if (authentication_type == CAUTH_GSI) {
const char *fqan = ((Condor_Auth_X509*)authenticator_)->getFQAN();
if (fqan && fqan[0]) {
dprintf (D_SECURITY, "ZKM: GSI was used, and FQAN is present.\n");
auth_name_to_map = fqan;
included_voms = true;
}
}
#endif
if (global_map_file) {
MyString canonical_user;
dprintf (D_SECURITY, "ZKM: 1: attempting to map '%s'\n", auth_name_to_map.Value());
bool mapret = global_map_file->GetCanonicalization(method_string, auth_name_to_map.Value(), canonical_user);
dprintf (D_SECURITY, "ZKM: 2: mapret: %i included_voms: %i canonical_user: %s\n", mapret, included_voms, canonical_user.Value());
// if it did not find a user, and we included voms attrs, try again without voms
if (mapret && included_voms) {
dprintf (D_SECURITY, "ZKM: now attempting to map '%s'\n", authentication_name);
mapret = global_map_file->GetCanonicalization(method_string, authentication_name, canonical_user);
dprintf (D_SECURITY, "ZKM: now 2: mapret: %i included_voms: %i canonical_user: %s\n", mapret, included_voms, canonical_user.Value());
}
if (!mapret) {
// returns true on failure?
dprintf (D_FULLDEBUG, "ZKM: successful mapping to %s\n", canonical_user.Value());
// there is a switch for GSI to use the default globus function for this, in
// case there is some custom globus mapping add-on, or the admin just wants
// to use the grid-mapfile in use by other globus software.
//
// if they don't opt for globus to map, just fall through to the condor
// mapfile.
//
if ((authentication_type == CAUTH_GSI) && (canonical_user == "GSS_ASSIST_GRIDMAP")) {
#if defined(HAVE_EXT_GLOBUS)
// nameGssToLocal calls setRemoteFoo directly.
int retval = ((Condor_Auth_X509*)authenticator_)->nameGssToLocal( authentication_name );
if (retval) {
dprintf (D_SECURITY, "Globus-based mapping was successful.\n");
} else {
dprintf (D_SECURITY, "Globus-based mapping failed; will use [email protected]\n");
}
#else
dprintf(D_ALWAYS, "ZKM: GSI not compiled, but was used?!!");
//.........这里部分代码省略.........
示例15: test_tokener_parse_basic
static bool test_tokener_parse_basic() {
emit_test("Test basic tokener parsing functions");
MyString msg;
std::string temp;
tokener toke("now is the time");
REQUIRE (toke.content() == "now is the time");
REQUIRE(toke.next() && toke.matches("now"));
toke.copy_token(temp);
REQUIRE(temp == "now");
REQUIRE(toke.compare_nocase("NAW") > 0);
REQUIRE(toke.compare_nocase("NoW") == 0);
REQUIRE(toke.compare_nocase("pow") < 0);
REQUIRE(toke.next() && toke.matches("is"));
REQUIRE(toke.next() && toke.matches("the"));
REQUIRE(toke.next() && toke.matches("time"));
REQUIRE( ! toke.next());
REQUIRE (toke.content() == "now is the time");
toke.set("this is 'the end', really");
REQUIRE(toke.next() && toke.matches("this"));
REQUIRE(toke.next() && toke.matches("is"));
REQUIRE( ! toke.is_quoted_string());
REQUIRE( ! toke.is_regex());
REQUIRE(toke.next() && toke.matches("the end"));
REQUIRE(toke.is_quoted_string());
REQUIRE( ! toke.is_regex());
REQUIRE(toke.starts_with("the "));
REQUIRE(toke.next() && toke.matches(","));
REQUIRE( ! toke.is_quoted_string());
REQUIRE( ! toke.is_regex());
REQUIRE(toke.next() && toke.matches("really"));
REQUIRE( ! toke.starts_with("the"));
REQUIRE(toke.at_end());
REQUIRE( ! toke.next());
toke.rewind();
REQUIRE(toke.next() && toke.matches("this"));
toke.copy_to_end(temp);
REQUIRE(temp == "this is 'the end', really");
toke.mark_after();
toke.next();
REQUIRE(toke.next() && toke.matches("the end"));
toke.next();
toke.copy_marked(temp);
if (temp != " is 'the end'") {
emit_step_failure(__LINE__, msg.formatstr("toke.copy_marked() returned |%s| should be | is 'the end'|", temp.c_str()));
}
toke.copy_to_end(temp);
if (temp != ", really") {
emit_step_failure(__LINE__, msg.formatstr("toke.copy_marked() returned |%s| should be |, really|", temp.c_str()));
}
return REQUIRED_RESULT();
}