void init_arch(void) { struct utsname buf; if( uname(&buf) < 0 ) { return; } uname_arch = strdup( buf.machine ); if( !uname_arch ) { EXCEPT( "Out of memory!" ); } uname_opsys = strdup( buf.sysname ); if( !uname_opsys ) { EXCEPT( "Out of memory!" ); } // 02-14-2012 bgietzel // New section for determining OpSys related params // Find values for MacOS, BSD, Linux, then everything else (Unix) // Windows params are set earlier in this code // Param Changes // NAME OLD ==> Linux | BSD | UNIX | Windows // --------------------------------------------------------------------------- // OpSys = LINUX ==> LINUX | OSX | AIX | WINDOWS // OpSysAndVer = LINUX ==> RedHat5 | MacOSX7 | AIX53 | WINDOWS601 // OpSysVer = 206 ==> 501 | 703 | 503 | 601 // OpSysShortName = N/A ==> Linux | MACOSX | AIX | Win7 // OpSysLongName = N/A ==> Red Hat 5.1 | MACOSX 7.3 | AIX 5.3 | Windows 7 SP2 // OpSysMajorVer = N/A ==> 5 | 7 | 5 | 601 // OpSysName(dist) = N/A ==> RedHat | Lion | AIX | Windows7 // OpSysLegacy = N/A ==> LINUX | OSX | AIX | WINNT61 #if defined( Darwin ) opsys = strdup( "OSX" ); opsys_legacy = strdup( opsys ); opsys_short_name = strdup( "MacOSX" ); opsys_long_name = sysapi_get_darwin_info(); opsys_major_version = sysapi_find_darwin_major_version( opsys_long_name ); opsys_version = sysapi_translate_opsys_version( opsys_long_name ); opsys_versioned = sysapi_find_opsys_versioned( opsys_short_name, opsys_major_version ); opsys_name = sysapi_find_darwin_opsys_name( opsys_major_version ); #elif defined( CONDOR_FREEBSD ) opsys = strdup( "FREEBSD" ); opsys_legacy = strdup( opsys ); opsys_short_name = strdup( "FreeBSD" ); opsys_name = strdup ( opsys_short_name ); opsys_long_name = sysapi_get_bsd_info( opsys_short_name, buf.release ); opsys_major_version = sysapi_find_major_version( buf.release ); opsys_versioned = sysapi_find_opsys_versioned( opsys_name, opsys_major_version ); opsys_version = sysapi_translate_opsys_version( buf.release ); #else if(MATCH == strcasecmp(uname_opsys, "linux") ) { opsys = strdup( "LINUX" ); opsys_legacy = strdup( opsys ); opsys_long_name = sysapi_get_linux_info(); opsys_name = sysapi_find_linux_name( opsys_long_name ); opsys_short_name = strdup( opsys_name ); opsys_major_version = sysapi_find_major_version( opsys_long_name ); opsys_version = sysapi_translate_opsys_version( opsys_long_name ); opsys_versioned = sysapi_find_opsys_versioned( opsys_name, opsys_major_version ); } else { // if opsys_long_name is "Solaris 11.250" // opsys_name is "Solaris" // opsys_legacy is "SOLARIS" // opsys is "SOLARIS" // opsys_short_name is "Solaris" // opsys_versioned is "Solaris11" opsys_long_name = sysapi_get_unix_info( buf.sysname, buf.release, buf.version, _sysapi_opsys_is_versioned ); char * p = strdup( opsys_long_name ); opsys_name = p; p = strchr(p, ' '); if (p) *p = 0; opsys_legacy = p = strdup( opsys_name ); for (; *p; ++p) { *p = toupper(*p); } opsys = strdup( opsys_legacy ); opsys_short_name = strdup( opsys_name ); opsys_major_version = sysapi_find_major_version( opsys_long_name ); opsys_version = sysapi_translate_opsys_version( opsys_long_name ); opsys_versioned = sysapi_find_opsys_versioned( opsys_name, opsys_major_version ); } #endif if (!opsys) { opsys = strdup("Unknown"); } if (!opsys_name) { opsys_name = strdup("Unknown"); } if (!opsys_short_name) { opsys_short_name = strdup("Unknown"); } if (!opsys_long_name) { opsys_long_name = strdup("Unknown"); } if (!opsys_versioned) { opsys_versioned = strdup("Unknown"); } if (!opsys_legacy) { opsys_legacy = strdup("Unknown"); } // Print out param values to the logfiles for debugging dprintf(D_FULLDEBUG, "OpSysMajorVersion: %d \n", opsys_major_version); dprintf(D_FULLDEBUG, "OpSysShortName: %s \n", opsys_short_name); dprintf(D_FULLDEBUG, "OpSysLongName: %s \n", opsys_long_name); dprintf(D_FULLDEBUG, "OpSysAndVer: %s \n", opsys_versioned); dprintf(D_FULLDEBUG, "OpSysLegacy: %s \n", opsys_legacy); dprintf(D_FULLDEBUG, "OpSysName: %s \n", opsys_name); dprintf(D_FULLDEBUG, "OpSysVer: %d \n", opsys_version); dprintf(D_FULLDEBUG, "OpSys: %s \n", opsys); // Now find the arch arch = sysapi_translate_arch( buf.machine, buf.sysname ); if ( arch && opsys ) { arch_inited = TRUE; } }
// Linux methods const char * sysapi_get_linux_info(void) { char* info_str = NULL; FILE *my_fp; const char * etc_issue_path[] = { "/etc/issue","/etc/redhat-release","/etc/issue.net",NULL }; int i; for (i=0;etc_issue_path[i];i++) { // read the first line only my_fp = safe_fopen_wrapper_follow(etc_issue_path[i], "r"); if ( my_fp != NULL ) { char tmp_str[200] = {0}; char *ret = fgets(tmp_str, sizeof(tmp_str), my_fp); if (ret == NULL) { strcpy( tmp_str, "Unknown" ); } dprintf(D_FULLDEBUG, "Result of reading %s: %s \n", etc_issue_path[i], tmp_str); fclose(my_fp); // trim trailing spaces and other cruft int len = strlen(tmp_str); while (len > 0) { while (len > 0 && (isspace((int)(tmp_str[len-1])) || tmp_str[len-1] == '\n') ) { tmp_str[--len] = 0; } // Ubuntu and Debian have \n \l at the end of the issue string // this looks like a bug, in any case, we want to strip it if (len > 2 && tmp_str[len-2] == '\\' && (tmp_str[len-1] == 'n' || tmp_str[len-1] == 'l')) { tmp_str[--len] = 0; tmp_str[--len] = 0; } else { break; } } info_str = strdup( tmp_str ); } else { continue; } const char *temp_opsys_name = sysapi_find_linux_name( info_str ); ASSERT(temp_opsys_name); if ( strcmp(temp_opsys_name,"LINUX")==0 ) { // failed to find what we want in this issue file; try another free(const_cast<char*>(temp_opsys_name)); free(info_str); info_str = NULL; } else { // we found distro info in this line, stop searching free(const_cast<char*>(temp_opsys_name)); break; } } if (!info_str) { info_str = strdup( "Unknown" ); } if( !info_str ) { EXCEPT( "Out of memory!" ); } return info_str; }