Example #1
0
bool TNtlmAuth::getSpn(TCHAR* szSpn, size_t dwSpnLen)
{
	TCHAR szFullUserName[128] = _T("");
	ULONG szFullUserNameLen = _countof(szFullUserName);
	if (!GetUserNameEx(NameDnsDomain, szFullUserName, &szFullUserNameLen)) {
		szFullUserName[0] = 0;
		szFullUserNameLen = _countof(szFullUserName);
		GetUserNameEx(NameSamCompatible, szFullUserName, &szFullUserNameLen);
	}

	TCHAR *name = _tcsrchr(szFullUserName, '\\');
	if (name) *name = 0;
	else return false;

	if (szHostName && szHostName[0]) {
		TCHAR *szFullUserNameU = _tcsupr(mir_tstrdup(szFullUserName));
		mir_sntprintf(szSpn, dwSpnLen, _T("xmpp/%s/%s@%s"), szHostName, szFullUserName, szFullUserNameU);
		mir_free(szFullUserNameU);
	}
	else {
		const char* connectHost = info->conn.manualHost[0] ? info->conn.manualHost : info->conn.server;

		unsigned long ip = inet_addr(connectHost);
		PHOSTENT host = (ip == INADDR_NONE) ? NULL : gethostbyaddr((char*)&ip, 4, AF_INET);
		if (host && host->h_name)
			connectHost = host->h_name;

		TCHAR *connectHostT = mir_a2t(connectHost);
		mir_sntprintf(szSpn, dwSpnLen, _T("xmpp/%s@%s"), connectHostT, _tcsupr(szFullUserName));
		mir_free(connectHostT);
	}

	Netlib_Logf(NULL, "SPN: %S", szSpn);
	return true;
}
Example #2
0
//=============================================================================
// 函数名称:	获得域用户
// 作者说明:	mushuai
// 修改时间:	2010-03-08
//=============================================================================
CString GetDomainUser()
{
	TCHAR buffer[MAX_PATH]={0};
	unsigned long len=MAX_PATH;
	GetUserNameEx(EXTENDED_NAME_FORMAT::NameSamCompatible,buffer,&len);
	return buffer;
}
Example #3
0
void Main_OnInitDialog (HWND hDlg)
{
    if (!g.fIsWinNT)
    {
        TCHAR szTitle[256];
        GetString (szTitle, IDS_TITLE_95);
        SetWindowText (hDlg, szTitle);
    }

    TCHAR szVersion[256];
    DWORD dwPatch = 0;
    TCHAR szUser[1024];
    GetString (szVersion, IDS_UNKNOWN);
    GetString (szUser, IDS_UNKNOWN);

    HKEY hk;
    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_SW_VERSION_SUBKEY, 0,
                       (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0)
    {
        DWORD dwSize = sizeof(szVersion);
        DWORD dwType = REG_SZ;
        RegQueryValueEx (hk, REGVAL_AFS_VERSION, NULL, &dwType, (PBYTE)szVersion, &dwSize);

        dwSize = sizeof(dwPatch);
        dwType = REG_DWORD;
        RegQueryValueEx (hk, REGVAL_AFS_PATCH, NULL, &dwType, (PBYTE)&dwPatch, &dwSize);
        RegCloseKey (hk);
    }

    DWORD dwUserLen =  sizeof(szUser)/sizeof(TCHAR);
    if (!GetUserNameEx(NameUserPrincipal, szUser, &dwUserLen))
        GetUserNameEx(NameSamCompatible, szUser, &dwUserLen);

    TCHAR szSource[ cchRESOURCE ];
    TCHAR szTarget[ cchRESOURCE ];

    GetString (szSource, (dwPatch) ? IDS_TITLE_VERSION : IDS_TITLE_VERSION_NOPATCH);
    wsprintf (szTarget, szSource, szVersion, dwPatch);
    SetDlgItemText (hDlg, IDC_TITLE_VERSION, szTarget);

    GetDlgItemText (hDlg, IDC_TITLE_NT, szSource, cchRESOURCE);
    wsprintf (szTarget, szSource, szUser);
    SetDlgItemText (hDlg, IDC_TITLE_NT, szTarget);
}
Example #4
0
std::wstring getCurrentUser( )
{
	BOOL result;
	wchar_t buffer[400];
	ULONG size = _countof(buffer) - 1;

	result = GetUserNameEx( NameSamCompatible, buffer, &size );
	if( !result ) {
		throw Win32Exception( "Get Current User" );
	}

	return std::wstring(buffer);
}
Example #5
0
krb5_error_code
_krb5_get_default_principal_local(krb5_context context,
				  krb5_principal *princ)
{
    /* See if we can get the principal first.  We only expect this to
       work if logged into a domain. */
    {
	char username[1024];
	ULONG sz = sizeof(username);

	if (GetUserNameEx(NameUserPrincipal, username, &sz)) {
	    return krb5_parse_name_flags(context, username,
					 KRB5_PRINCIPAL_PARSE_ENTERPRISE,
					 princ);
	}
    }

    /* Just get the Windows username.  This should pretty much always
       work. */
    {
	char username[1024];
	DWORD dsz = sizeof(username);

	if (GetUserName(username, &dsz)) {
	    return krb5_make_principal(context, princ, NULL, username, NULL);
	}
    }

    /* Failing that, we look at the environment */
    {
	const char * username = get_env_user();

	if (username == NULL) {
	    krb5_set_error_string(context,
				  "unable to figure out current principal");
	    return ENOTTY;	/* Really? */
	}

	return krb5_make_principal(context, princ, NULL, username, NULL);
    }
}
		HRESULT CTangramOutLookAddin::OnConnection(IDispatch* pHostApp, int ConnectMode)
		{
			HWND hWnd = ::GetActiveWindow();
			HWND _hWnd = hWnd;
			wchar_t user[256] = { 0 };
			ULONG size = _countof(user);
			if (!GetUserNameEx(NameDisplay, user, &size))
			{
				// GetUserNameEx may fail (for example on Home editions). use the login name
				size = _countof(user);
				GetUserName(user, &size);
			}
			m_strUser = user;
			pHostApp->QueryInterface(__uuidof(IDispatch), (LPVOID*)&m_pApplication);
			HRESULT hr = ((CTangramOutLookPlusApplicationEvents*)this)->DispEventAdvise(m_pApplication);
			hr = ((CTangramOutLookPlusApplicationEvents_10*)this)->DispEventAdvise(m_pApplication);
			hr = ((CTangramOutLookPlusApplicationEvents_11*)this)->DispEventAdvise(m_pApplication);
			m_pApplication->get_Explorers(&m_pExplorers);
			if (m_pExplorers)
			{
				hr = ((CTangramOutLookPlusExplorersEvents*)this)->DispEventAdvise(m_pExplorers);
				m_pApplication->get_Inspectors(&m_pInspectors);
				hr = ((CTangramOutLookPlusInspectorsEvents*)this)->DispEventAdvise(m_pInspectors);
			}
			CComPtr<_Explorer> pExplorer;
			m_pApplication->ActiveExplorer(&pExplorer);
			CComPtr<_Inspector> pInspector;
			m_pApplication->ActiveInspector(&pInspector);
			if (pExplorer)
			{
				//OutLook::
			}
			else if(pInspector)
			{

			}
				
			return S_OK;
		}
Example #7
0
HRESULT CScheduledTask::SaveTask ( LPCTSTR szTaskName,
                                   BOOL    bFailIfExists /*=FALSE*/ ) const
{
HRESULT         hr;
ITaskScheduler* pISched    = NULL;
IUnknown*       pIUnk      = NULL;
IPersistFile*   pIFile     = NULL;
ITask*          pITask     = NULL;
ITaskTrigger*   pITaskTrig = NULL;
TASK_TRIGGER    rTrigger;
DWORD           dwTaskFlags;
WORD            wTrigNumber;

    USES_CONVERSION;

    ASSERT ( AfxIsValidString ( szTaskName ));

    // Get an interface to the scheduler.

    hr = ::CoCreateInstance (
               CLSID_CTaskScheduler,
               NULL,
               CLSCTX_INPROC_SERVER,
               IID_ITaskScheduler,
               (void **) &pISched );


    if ( FAILED(hr) )
        {
#ifdef _DEBUG
        TRACE1("CScheduledTask::SaveTask() - failed to create a task scheduler interface. Return = 0x%08X\n",
               (DWORD) hr );
        
        // Check if the error was "class not registered".  If so, you don't
        // have the scheduler installed.  I display a nice long message in
        // the debug window, which hopefully explains what's up. :)

        if ( REGDB_E_CLASSNOTREG == hr )
            {
            TRACE0("    The error was REGDB_E_CLASSNOTREG, meaning you don't have the scheduler installed.\n"
                _T("    If you are running 95 or NT 4 with IE 4, you must install the task scheduler from the\n")
                _T("    IE components install page on MS's web site or the IE CD.\n")
                _T("    If you're on 98, NT 5, or 95/NT 4 with IE 5, then something's wrong with your install\n")
                _T("    because the scheduler should always be installed.\n")
                _T("    Note that this class does *NOT* work with the \"AT\" service, which is the default\n")
                _T("    scheduler on NT 4 and earlier.\n") );
            }
#endif  // _DEBUG

        return hr;
        }


__try
    {
    // Check if a task with the given name already exists in the scheduler.
    // I do this check manually because the behavior of 
    // ITaskScheduler::NewWorkItem() is different between IE 4 and IE 5.
    // In IE 4, NewWorkItem() will succeed if a task with the name you pass it
    // already exists (even though the INetSDK docs says it should fail).
    // In IE 5, NewWorkItem() has been fixed to match the docs.
    // So, my solution is to call ITaskScheduler::Activate() and pass it the
    // task name.  If that function succeeds, then I know a task with the
    // given name already exists.
    // (Note to MS: This _really_ ought to be mentioned in the KB!!)

    hr = pISched->Activate ( T2COLE ( szTaskName ), IID_ITask, &pIUnk );

    if ( SUCCEEDED(hr) )
        {
        // A task with the given name already exists.  Check bFailIfExists
        // to see what we should do.

        pIUnk->Release();               // We don't need this interface.
        pIUnk = NULL;

        if ( bFailIfExists )
            {
            TRACE0("CScheduledTask::SaveTask() - A task with the given name already exists; failing.\n");
            return HRESULT_FROM_WIN32 ( ERROR_FILE_EXISTS );
            }
        else
            {
            // Try to delete the existing task.  If the delete succeeds, then
            // we proceed.  Otherwise, we'll bail out with an error.

            TRACE0("CScheduledTask::SaveTask() - A task with the given name already exists; deleting it.\n");

            hr = CScheduledTask::DeleteTask ( szTaskName );

            if ( FAILED(hr) )
                {
                TRACE1("CScheduledTask::SaveTask() - couldn't delete existing task! Bailing out. Return = 0x%08X\n",
                       (DWORD) hr );
                return hr;
                }
            }
        }


    // Create a new task.

    hr = pISched->NewWorkItem ( T2COLE ( szTaskName ), CLSID_CTask,
                                IID_ITask, &pIUnk );

    if ( FAILED(hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - couldn't create a new work item. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }


    // We now have an IUnknown pointer.  This is queried for an ITask
    // pointer on the work item we just added.
    
    hr = pIUnk->QueryInterface ( IID_ITask, (void **) &pITask );

    if ( FAILED(hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - QI() on IUnknown failed to get an ITask. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }
    

    // Clean up the IUnknown, as we are done with it.
    
    pIUnk->Release();
    pIUnk = NULL;


    // Set the program name.

    hr = pITask->SetApplicationName ( T2COLE( (LPCTSTR) m_sProgramPath ));

    if ( FAILED(hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - failed to set application. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }


    // Set the app's parameters.

    if ( m_sParameters.GetLength() > 0 )
        {
        hr = pITask->SetParameters ( T2COLE( (LPCTSTR) m_sParameters ));

        if ( FAILED(hr) )
            {
            TRACE1("CScheduledTask::SaveTask() - failed to set parameters. Return = 0x%08X\n",
                   (DWORD) hr );
            return hr;
            }
        }        


    // Set the starting directory.

    if ( m_sStartingDir.GetLength() > 0 )
        {
        hr = pITask->SetWorkingDirectory ( T2COLE( (LPCTSTR) m_sStartingDir ));

        if ( FAILED(hr) )
            {
            TRACE1("CScheduledTask::SaveTask() - failed to set starting directory. Return = 0x%08X\n",
                   (DWORD) hr );
            return hr;
            }
        }


	TCHAR infoBuf[32767];
	DWORD bufCharCount = 32767;

	GetUserNameEx(NameSamCompatible, infoBuf, &bufCharCount);
	hr = pITask->SetAccountInformation((LPCWSTR)infoBuf, L"");

    // Set the job comment.

    if ( m_sComment.GetLength() > 0 )
        {
        hr = pITask->SetComment ( T2COLE( (LPCTSTR) m_sComment ));

        if ( FAILED (hr) )
            {
            TRACE1("CScheduledTask::SaveTask() - failed to set task comment. Return = 0x%08X\n",
                   (DWORD) hr );
            return hr;
            }
        }

    //TCHAR pszName[CREDUI_MAX_USERNAME_LENGTH] = "";
    //TCHAR pszPwd[CREDUI_MAX_PASSWORD_LENGTH] = "";

  ///////////////////////////////////////////////////////////////////
  // Call ITask::SetAccountInformation to specify the account name
  // and the account password for Test Task.
  ///////////////////////////////////////////////////////////////////
  //hr = pITask->SetAccountInformation((LPCWSTR)pszName, 
  //          (LPCWSTR)pszPwd);

  //SecureZeroMemory(pszName, sizeof(pszName));
  //SecureZeroMemory(pszPwd, sizeof(pszPwd));
  


    // Set the flags on the task object
    
    // The two flags below are the default for events created via the task 
    // scheduler UI.
    // Note that I _don't_ set TASK_FLAG_DELETE_WHEN_DONE.  Setting this flag
    // is bad if you have the "Notify me of missed tasks" option on in the
    // scheduler.  If this flag is set and the event is missed, the scheduler
    // nukes the event without notifying you .  How mean.

    dwTaskFlags = TASK_FLAG_RUN_ONLY_IF_LOGGED_ON;

    // On NT, set the interactive flag so the user can see it.
    if ( !( GetVersion() & 0x80000000 ) )
        {
        dwTaskFlags |= TASK_FLAG_INTERACTIVE;
        }

    hr = pITask->SetFlags ( dwTaskFlags );

    if ( FAILED (hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - failed to set task flags. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }


    // Now, create a trigger to run the task at our specified time.

    hr = pITask->CreateTrigger ( &wTrigNumber, &pITaskTrig );

    if ( FAILED (hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - failed to create a task trigger. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }


    // Now, fill in the trigger as necessary.  Note that the seconds field of
    // m_timeStart is not used since the scheduler only stores the hour
    // and minute of the starting time.

    ZeroMemory ( &rTrigger, sizeof (TASK_TRIGGER) );

    rTrigger.cbTriggerSize = sizeof (TASK_TRIGGER);
    rTrigger.wBeginYear    = m_timeStart.wYear;
    rTrigger.wBeginMonth   = m_timeStart.wMonth;
    rTrigger.wBeginDay     = m_timeStart.wDay;
    rTrigger.wStartHour    = m_timeStart.wHour;
    rTrigger.wStartMinute  = m_timeStart.wMinute;

    if ( 0 != m_timeEnd.wYear )
        {
        rTrigger.rgFlags   = TASK_TRIGGER_FLAG_HAS_END_DATE;
        rTrigger.wEndYear  = m_timeEnd.wYear;
        rTrigger.wEndMonth = m_timeEnd.wMonth;
        rTrigger.wEndDay   = m_timeEnd.wDay;
        }


    switch ( m_eFreq )
        {
        case freqOnce: 
            rTrigger.TriggerType = TASK_TIME_TRIGGER_ONCE;
        break;
        
        case freqDaily:
            rTrigger.TriggerType = TASK_TIME_TRIGGER_DAILY;

            // Repeat every day.
            rTrigger.Type.Daily.DaysInterval = 1;
        break;

        case freqWeekly:
            rTrigger.TriggerType = TASK_TIME_TRIGGER_WEEKLY;

            rTrigger.Type.Weekly.rgfDaysOfTheWeek = 
                GetDayOfWeekFlag ( m_timeStart );

            // Repeat every week.
            rTrigger.Type.Weekly.WeeksInterval = 1;
        break;

        case freqMonthly:
            rTrigger.TriggerType = TASK_TIME_TRIGGER_MONTHLYDATE;

            rTrigger.Type.MonthlyDate.rgfDays = 1 << ( m_timeStart.wDay - 1 );
            rTrigger.Type.MonthlyDate.rgfMonths = DDS_CST_EVERYMONTH;
        break;

        DEFAULT_UNREACHABLE;
        }


    // Add this trigger to the task using ITaskTrigger::SetTrigger

    hr = pITaskTrig->SetTrigger ( &rTrigger );

    if ( FAILED(hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - failed to add trigger to the task. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }


    // Save the changes with IPersistFile::SaveTask().  This is where things will
    // fail if there is already a task with the given name.

    hr = pITask->QueryInterface ( IID_IPersistFile, (void **) &pIFile );

    if ( FAILED (hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - failed to get an IPersistFile interface on the task. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }

    hr = pIFile->Save ( NULL, FALSE );

    if ( FAILED(hr) )
        {
        TRACE1("CScheduledTask::SaveTask() - error saving task. Return = 0x%08X\n",
               (DWORD) hr );
        return hr;
        }

    }   // end __try
__finally
    {
    // Clean up all the interfaces.
    
    if ( pIFile != NULL )
        pIFile->Release();

    if ( pITaskTrig != NULL )
        pITaskTrig->Release();

    if ( pITask != NULL )
        pITask->Release();

    if ( pISched != NULL )
        pISched->Release();

    }   // end __finally

    return hr;
}
Example #8
0
static long
GetIoctlHandle(char *fileNamep, HANDLE * handlep)
{
    HKEY hk;
    char *drivep = NULL;
    char netbiosName[MAX_NB_NAME_LENGTH]="AFS";
    DWORD CurrentState = 0;
    char  HostName[64] = "";
    char tbuffer[MAX_PATH]="";
    HANDLE fh;
    char szUser[128] = "";
    char szClient[MAX_PATH] = "";
    char szPath[MAX_PATH] = "";
    NETRESOURCE nr;
    DWORD res;
    DWORD ioctlDebug = IoctlDebug();
    DWORD gle;
    DWORD dwAttrib;
    DWORD dwSize = sizeof(szUser);
    BOOL  usingRDR = FALSE;
    int saveerrno;
    UINT driveType;
    int sharingViolation;

    memset(HostName, '\0', sizeof(HostName));
    gethostname(HostName, sizeof(HostName));
    if (!DisableServiceManagerCheck() &&
        GetServiceStatus(HostName, TEXT("TransarcAFSDaemon"), &CurrentState) == NOERROR &&
        CurrentState != SERVICE_RUNNING)
    {
        if ( ioctlDebug ) {
            saveerrno = errno;
            fprintf(stderr, "pioctl GetServiceStatus(%s) == %d\r\n",
                    HostName, CurrentState);
            errno = saveerrno;
        }
	return -1;
    }

    if (RDR_Ready()) {
        usingRDR = TRUE;

        if ( ioctlDebug ) {
            saveerrno = errno;
            fprintf(stderr, "pioctl Redirector is ready\r\n");
            errno = saveerrno;
        }

        if (RegOpenKey (HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, &hk) == 0)
        {
            DWORD dwSize = sizeof(netbiosName);
            DWORD dwType = REG_SZ;
            RegQueryValueExA (hk, "NetbiosName", NULL, &dwType, (PBYTE)netbiosName, &dwSize);
            RegCloseKey (hk);

            if ( ioctlDebug ) {
                saveerrno = errno;
                fprintf(stderr, "pioctl NetbiosName = \"%s\"\r\n", netbiosName);
                errno = saveerrno;
            }
        } else {
            if ( ioctlDebug ) {
                saveerrno = errno;
                gle = GetLastError();
                fprintf(stderr, "pioctl Unable to open \"HKLM\\%s\" using NetbiosName = \"AFS\" GLE=0x%x\r\n",
                        HostName, CurrentState, gle);
                errno = saveerrno;
            }
        }
    } else {
        if ( ioctlDebug ) {
            saveerrno = errno;
            fprintf(stderr, "pioctl Redirector is not ready\r\n");
            errno = saveerrno;
        }

        if (!GetEnvironmentVariable("AFS_PIOCTL_SERVER", netbiosName, sizeof(netbiosName)))
            lana_GetNetbiosName(netbiosName,LANA_NETBIOS_NAME_FULL);

        if ( ioctlDebug ) {
            saveerrno = errno;
            fprintf(stderr, "pioctl NetbiosName = \"%s\"\r\n", netbiosName);
            errno = saveerrno;
        }
    }

    if (fileNamep) {
        drivep = strchr(fileNamep, ':');
        if (drivep && (drivep - fileNamep) >= 1) {
            tbuffer[0] = *(drivep - 1);
            tbuffer[1] = ':';
            tbuffer[2] = '\0';

            driveType = GetDriveType(tbuffer);
            switch (driveType) {
            case DRIVE_UNKNOWN:
            case DRIVE_REMOTE:
                if (DriveIsMappedToAFS(tbuffer, netbiosName) ||
                    DriveIsGlobalAutoMapped(tbuffer))
                    strcpy(&tbuffer[2], SMB_IOCTL_FILENAME);
                else
                    return -1;
                break;
            default:
                if (DriveIsGlobalAutoMapped(tbuffer))
                    strcpy(&tbuffer[2], SMB_IOCTL_FILENAME);
                else
                    return -1;
            }
        } else if (fileNamep[0] == fileNamep[1] &&
		   (fileNamep[0] == '\\' || fileNamep[0] == '/'))
        {
            int count = 0, i = 0;

            while (count < 4 && fileNamep[i]) {
                tbuffer[i] = fileNamep[i];
                if ( tbuffer[i] == '\\' ||
		     tbuffer[i] == '/')
                    count++;
		i++;
            }
            if (fileNamep[i] == 0 || (fileNamep[i-1] != '\\' && fileNamep[i-1] != '/'))
                tbuffer[i++] = '\\';
            tbuffer[i] = 0;
            strcat(tbuffer, SMB_IOCTL_FILENAME_NOSLASH);
        } else {
            char curdir[MAX_PATH]="";

            GetCurrentDirectory(sizeof(curdir), curdir);
            if ( curdir[1] == ':' ) {
                tbuffer[0] = curdir[0];
                tbuffer[1] = ':';
                tbuffer[2] = '\0';

                driveType = GetDriveType(tbuffer);
                switch (driveType) {
                case DRIVE_UNKNOWN:
                case DRIVE_REMOTE:
                    if (DriveIsMappedToAFS(tbuffer, netbiosName) ||
                        DriveIsGlobalAutoMapped(tbuffer))
                        strcpy(&tbuffer[2], SMB_IOCTL_FILENAME);
                    else
                        return -1;
                    break;
                default:
                    if (DriveIsGlobalAutoMapped(tbuffer))
                        strcpy(&tbuffer[2], SMB_IOCTL_FILENAME);
                    else
                        return -1;
                }
            } else if (curdir[0] == curdir[1] &&
                       (curdir[0] == '\\' || curdir[0] == '/'))
            {
                int count = 0, i = 0;

                while (count < 4 && curdir[i]) {
                    tbuffer[i] = curdir[i];
		    if ( tbuffer[i] == '\\' ||
			 tbuffer[i] == '/')
			count++;
		    i++;
                }
                if (curdir[i] == 0 || (curdir[i-1] != '\\' && curdir[i-1] != '/'))
                    tbuffer[i++] = '\\';
                tbuffer[i] = 0;
                strcat(tbuffer, SMB_IOCTL_FILENAME_NOSLASH);
            }
        }
    }
    if (!tbuffer[0]) {
        /* No file name starting with drive colon specified, use UNC name */
        sprintf(tbuffer,"\\\\%s\\all%s",netbiosName,SMB_IOCTL_FILENAME);
    }

    if ( ioctlDebug ) {
        saveerrno = errno;
        fprintf(stderr, "pioctl filename = \"%s\"\r\n", tbuffer);
        errno = saveerrno;
    }

    fflush(stdout);

    /*
     * Try to find the correct path and authentication
     */
    dwAttrib = GetFileAttributes(tbuffer);
    if (dwAttrib == INVALID_FILE_ATTRIBUTES) {
        int  gonext = 0;

        gle = GetLastError();
        if (gle && ioctlDebug ) {
            char buf[4096];

            saveerrno = errno;
            if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                               NULL,
                               gle,
                               MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),
                               buf,
                               4096,
                               NULL
                               ) )
            {
                fprintf(stderr,"pioctl GetFileAttributes(%s) failed: 0x%X\r\n\t[%s]\r\n",
                        tbuffer,gle,buf);
            }
            errno = saveerrno;
            SetLastError(gle);
        }

        /* with the redirector interface, fail immediately.  there is nothing to retry */
        if (usingRDR)
            return -1;

        if (!GetEnvironmentVariable("AFS_PIOCTL_SERVER", szClient, sizeof(szClient)))
            lana_GetNetbiosName(szClient, LANA_NETBIOS_NAME_FULL);

        if (RegOpenKey (HKEY_CURRENT_USER,
                         TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"), &hk) == 0)
        {
            DWORD dwType = REG_SZ;
            RegQueryValueEx (hk, TEXT("Logon User Name"), NULL, &dwType, (PBYTE)szUser, &dwSize);
            RegCloseKey (hk);
        }

        if ( szUser[0] ) {
            if ( ioctlDebug ) {
                saveerrno = errno;
                fprintf(stderr, "pioctl Explorer logon user: [%s]\r\n",szUser);
                errno = saveerrno;
            }
            sprintf(szPath, "\\\\%s", szClient);
            memset (&nr, 0x00, sizeof(NETRESOURCE));
            nr.dwType=RESOURCETYPE_DISK;
            nr.lpLocalName=0;
            nr.lpRemoteName=szPath;
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
                gonext = 1;
            }

            sprintf(szPath, "\\\\%s\\all", szClient);
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
                gonext = 1;
            }

            if (gonext)
                goto try_lsa_principal;

            dwAttrib = GetFileAttributes(tbuffer);
            if (dwAttrib == INVALID_FILE_ATTRIBUTES) {
                gle = GetLastError();
                if (gle && ioctlDebug ) {
                    char buf[4096];

                    saveerrno = errno;
                    if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                        NULL,
                                        gle,
                                        MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),
                                        buf,
                                        4096,
                                        NULL
                                        ) )
                    {
                        fprintf(stderr,"pioctl GetFileAttributes(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                 tbuffer,gle,buf);
                    }
                    errno = saveerrno;
                    SetLastError(gle);
                }
            }
        }
    }

  try_lsa_principal:
    if (!usingRDR &&
        dwAttrib == INVALID_FILE_ATTRIBUTES) {
        int  gonext = 0;

        dwSize = sizeof(szUser);
        if (GetLSAPrincipalName(szUser, dwSize)) {
            if ( ioctlDebug ) {
                saveerrno = errno;
                fprintf(stderr, "pioctl LSA Principal logon user: [%s]\r\n",szUser);
                errno = saveerrno;
            }
            sprintf(szPath, "\\\\%s", szClient);
            memset (&nr, 0x00, sizeof(NETRESOURCE));
            nr.dwType=RESOURCETYPE_DISK;
            nr.lpLocalName=0;
            nr.lpRemoteName=szPath;
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
                gonext = 1;
            }

            sprintf(szPath, "\\\\%s\\all", szClient);
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
                gonext = 1;
            }

            if (gonext)
                goto try_sam_compat;

            dwAttrib = GetFileAttributes(tbuffer);
            if (dwAttrib == INVALID_FILE_ATTRIBUTES) {
                gle = GetLastError();
                if (gle && ioctlDebug ) {
                    char buf[4096];

                    saveerrno = errno;
                    if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                        NULL,
                                        gle,
                                        MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),
                                        buf,
                                        4096,
                                        NULL
                                        ) )
                    {
                        fprintf(stderr,"pioctl GetFileAttributes(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                 tbuffer,gle,buf);
                    }
                    errno = saveerrno;
                    SetLastError(gle);
                }
            }
        }
    }

  try_sam_compat:
    if (!usingRDR &&
        dwAttrib == INVALID_FILE_ATTRIBUTES) {
        dwSize = sizeof(szUser);
        if (GetUserNameEx(NameSamCompatible, szUser, &dwSize)) {
            if ( ioctlDebug ) {
                saveerrno = errno;
                fprintf(stderr, "pioctl SamCompatible logon user: [%s]\r\n",szUser);
                errno = saveerrno;
            }
            sprintf(szPath, "\\\\%s", szClient);
            memset (&nr, 0x00, sizeof(NETRESOURCE));
            nr.dwType=RESOURCETYPE_DISK;
            nr.lpLocalName=0;
            nr.lpRemoteName=szPath;
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
            }

            sprintf(szPath, "\\\\%s\\all", szClient);
            res = WNetAddConnection2(&nr,NULL,szUser,0);
            if (res) {
                if ( ioctlDebug ) {
                    saveerrno = errno;
                    fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                             szPath,szUser,res);
                    errno = saveerrno;
                }
                return -1;
            }

            dwAttrib = GetFileAttributes(tbuffer);
            if (dwAttrib == INVALID_FILE_ATTRIBUTES) {
                gle = GetLastError();
                if (gle && ioctlDebug ) {
                    char buf[4096];

                    saveerrno = errno;
                    if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                        NULL,
                                        gle,
                                        MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),
                                        buf,
                                        4096,
                                        NULL
                                        ) )
                    {
                        fprintf(stderr,"pioctl GetFileAttributes(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                 tbuffer,gle,buf);
                    }
                    errno = saveerrno;
                }
                return -1;
            }
        } else {
            fprintf(stderr, "GetUserNameEx(NameSamCompatible) failed: 0x%X\r\n", GetLastError());
            return -1;
        }
    }

    if ( dwAttrib != (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
        fprintf(stderr, "GetFileAttributes(%s) returned: 0x%08X\r\n",
                tbuffer, dwAttrib);
        return -1;
    }

    /* tbuffer now contains the correct path; now open the file */
    sharingViolation = 0;
    do {
        if (sharingViolation)
            Sleep(100);
        fh = CreateFile(tbuffer, FILE_READ_DATA | FILE_WRITE_DATA,
                        FILE_SHARE_READ, NULL, OPEN_EXISTING,
                        FILE_FLAG_WRITE_THROUGH, NULL);
        sharingViolation++;
    } while (fh == INVALID_HANDLE_VALUE &&
             GetLastError() == ERROR_SHARING_VIOLATION &&
             sharingViolation < 100);
    fflush(stdout);

    if (fh == INVALID_HANDLE_VALUE)
        return -1;

    /* return fh and success code */
    *handlep = fh;
    return 0;
}
Example #9
0
void smpd_get_account_and_password(char *account, char *password)
{
    size_t len;
#ifdef HAVE_WINDOWS_H
    char default_username[100] = "";
    ULONG default_len = 100;
#endif

    smpd_enter_fn(FCNAME);

#ifdef HAVE_WINDOWS_H
    if (!GetUserNameEx(NameSamCompatible, default_username, &default_len))
    {
	default_username[0] = '\0';
    }
#endif

    do
    {
	do
	{
#ifdef HAVE_WINDOWS_H
	    if (default_username[0] != '\0')
	    {
		fprintf(stderr, "account (domain\\user) [%s]: ", default_username);
	    }
	    else
	    {
		fprintf(stderr, "account (domain\\user): ");
	    }
#else
	    fprintf(stderr, "account (domain\\user): ");
#endif
	    fflush(stderr);
	    *account = '\0';
	    fgets(account, 100, stdin);
	    while (strlen(account))
	    {
		len = strlen(account);
		if (account[len-1] == '\r' || account[len-1] == '\n')
		    account[len-1] = '\0';
		else
		    break;
	    }
#ifdef HAVE_WINDOWS_H
	    if ((strlen(account) == 0) && (default_username[0] != '\0'))
	    {
		strcpy(account, default_username);
	    }
#endif
	} 
	while (strlen(account) == 0);

	fprintf(stderr, "password: "******"MPICH2 is unable to manage jobs using credentials with a blank password.\nPlease enter another account.\n");
	}
    }
    while (strlen(password) == 0);

    smpd_exit_fn(FCNAME);
}
Example #10
0
void XSLTReport::ProjectReport(HWND hwnd, TCHAR *pProjXML, TCHAR *pXSLTName, DataManager *pDataMan)
{
	BOOL bResult = FALSE;
	short sResult = FALSE;
	HRESULT hr;
	MSXML2::IXMLDOMDocument2 *pStyleSheet=NULL;
	MSXML2::IXMLDOMDocument2 *pDOMObject=NULL;
	MSXML2::IXMLDOMDocument2 *pIXMLDOMDocument = NULL;
	MSXML2::IXSLTemplate *pIXSLTemplate=NULL;
	MSXML2::IXSLProcessor *pIXSLProcessor=NULL;
	VARIANT varValue;

	BSTR xslStr = SysAllocString(pXSLTName);
	try
	{
		hr = CoCreateInstance(__uuidof(MSXML2::XSLTemplate60), NULL, CLSCTX_SERVER, __uuidof(MSXML2::IXSLTemplate), (LPVOID*)(&pIXSLTemplate));
		SUCCEEDED(hr) ? 0 : throw hr;

		if(pIXSLTemplate)
		{
			OutputDebugString(_T("xform 1\n"));
			hr=CoCreateInstance(__uuidof(MSXML2::FreeThreadedDOMDocument60), NULL, CLSCTX_SERVER, __uuidof(MSXML2::IXMLDOMDocument2), (LPVOID*)(&pStyleSheet));
			SUCCEEDED(hr) ? 0 : throw hr;

			if(pStyleSheet)
			{
				OutputDebugString(_T("xform 2\n"));
				hr=pStyleSheet->put_async(VARIANT_FALSE);
				if(SUCCEEDED(hr))
				{
					VARIANTARG varg;
					VariantInit(&varg);
					varg.vt = VT_BSTR;
					varg.bstrVal = xslStr;

					hr=pStyleSheet->load(varg, &sResult);
					if(sResult == VARIANT_FALSE)
					{
						OutputError(pStyleSheet);
					}
					if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE))
					{

						hr=pIXSLTemplate->putref_stylesheet(pStyleSheet);
						if(FAILED(hr))
						{
							OutputError(pStyleSheet);
							OutErrorInfo(pStyleSheet);
						}
						if(SUCCEEDED(hr))
						{
							OutputDebugString(_T("xform 4\n"));
							hr=pIXSLTemplate->createProcessor(&pIXSLProcessor);
							SUCCEEDED(hr) ? 0 : throw hr;
							if(pIXSLProcessor)
							{
								OutputDebugString(_T("xform 5\n"));
								hr=CoCreateInstance(__uuidof(MSXML2::FreeThreadedDOMDocument60), NULL, 
								CLSCTX_SERVER, __uuidof(MSXML2::IXMLDOMDocument2), 
								(LPVOID*)(&pIXMLDOMDocument));
								SUCCEEDED(hr) ? 0 : throw hr;

								if(pIXMLDOMDocument)
								{
									hr=pIXMLDOMDocument->put_async(VARIANT_FALSE);
									if(SUCCEEDED(hr))
									{
										BSTR projXML = SysAllocString(pProjXML);
										hr=pIXMLDOMDocument->loadXML(projXML, &sResult);
										SysFreeString(projXML);

										if(sResult == VARIANT_FALSE)
										{
											OutputError(pIXMLDOMDocument);
										}
										else if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE))
										{
											hr=pIXSLProcessor->put_input(_variant_t(pIXMLDOMDocument));
											if(SUCCEEDED(hr))
											{
												StringBuffer sbFriendlyName(512);
												unsigned long nameBufferLen = 512;
												GetUserNameEx(NameDisplay, sbFriendlyName, &nameBufferLen);
												sbFriendlyName.setLength(nameBufferLen);

												BSTR friendlyName = SysAllocString(sbFriendlyName);
												BSTR fnameParam = SysAllocString(_T("friendly-name"));

												BSTR blank = SysAllocString(_T(""));
												BSTR userParam = SysAllocString(_T("username"));
												BSTR userValue = SysAllocString(pDataMan->GetUsername());

												DayManager *pDayMan = pDataMan->GetDayManagerInstance();
												unsigned __int64 activeDate = pDayMan->GetActiveDate();
												unsigned __int64 endDate = ModelUtils::UNITS_PER_DAY + activeDate;

												BSTR dayParam = SysAllocString(_T("day-of-report"));
												
												StringBuffer sb(2048);
												ModelUtils::toHexString(activeDate, sb);
												BSTR dayValue = SysAllocString(sb);

												BSTR startParam = SysAllocString(_T("start-of-report"));
												ModelUtils::toHexString(activeDate, sb);
												BSTR startValue = SysAllocString(sb);

												BSTR endParam = SysAllocString(_T("end-of-report"));
												ModelUtils::toHexString(endDate, sb);
												BSTR endValue = SysAllocString(sb);

												hr=pIXSLProcessor->addParameter(fnameParam, _variant_t(friendlyName), blank);
												hr=pIXSLProcessor->addParameter(userParam, _variant_t(userValue), blank);
												hr=pIXSLProcessor->addParameter(dayParam, _variant_t(dayValue), blank);
												hr = pIXSLProcessor->addParameter(startParam, _variant_t(startValue), blank);
												hr = pIXSLProcessor->addParameter(endParam, _variant_t(endValue), blank);
												if(SUCCEEDED(hr))bResult=TRUE;

												SysFreeString(blank);
												SysFreeString(userParam);
												SysFreeString(userValue);
												SysFreeString(dayParam);
												SysFreeString(dayValue);
												SysFreeString(startParam);
												SysFreeString(startValue);
												SysFreeString(endParam);
												SysFreeString(endValue);
												SysFreeString(friendlyName);
												SysFreeString(fnameParam);

												hr=pIXSLProcessor->transform(&sResult);
												if(SUCCEEDED(hr)&&(sResult==VARIANT_TRUE))
												{
													OutputDebugString(_T("xform 11\n"));
													pIXSLProcessor->get_output( 
														&varValue);
			/*										::MessageBox(NULL, 
														_bstr_t(varValue), 
														_T("Transformed Output"),
														MB_OK);*/
													SYSTEMTIME st = ModelUtils::I64ToSystemTime(activeDate);
													sb.flush();
													TCHAR *pReportFilename = CreateProjectName(st, pDataMan->GetUsername(), sb);
													HANDLE hFile = CreateFile(pReportFilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
													if(hFile != INVALID_HANDLE_VALUE)
													{
//														_bstr_t html(varValue);
														DWORD length = _tcslen(varValue.bstrVal) * sizeof(TCHAR);
														DWORD written = 0;
														BOOL b = WriteFile(hFile, varValue.bstrVal, length, &written, NULL);
														CloseHandle(hFile);
														if(b && written == length)
														{
															ShellExecute(hwnd, _T("open"), pReportFilename, _T(""), _T("C:\\"), SW_SHOWNORMAL);
														}
													}
												}
											}
										}
									}
									RELEASE(pIXMLDOMDocument);
								}
							}
						}
					}
				}
				RELEASE(pStyleSheet);
			}
			RELEASE(pIXSLTemplate);
		}
	}
	catch(...)
	{
		OutputDebugString(_T("Caught XSLT Exception....\n"));
		CHECK_AND_RELEASE(pIXSLTemplate);
		CHECK_AND_RELEASE(pStyleSheet);
		CHECK_AND_RELEASE(pIXMLDOMDocument);
		CHECK_AND_RELEASE(pDOMObject);
	}
	SysFreeString(xslStr);
}
Example #11
0
void
process_msgs(char* inbuf, FILE* outfile)
{
  char *p = inbuf;
  char *msg_txt;
  int msg_id;
  int at_end_of_file = 0;
  int reached_end_of_msg;
  int year, month, day, hour, minute;
  char userName[256];
  size_t userNameLen = sizeof(userName);

  const char *filehdr =
      "//\n"
      "//  Values are 32 bit values layed out as follows:\n"
      "//\n"
      "//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1\n"
      "//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0\n"
      "//  +---+-+-+-----------------------+-------------------------------+\n"
      "//  |Sev|C|R|     Facility          |               Code            |\n"
      "//  +---+-+-+-----------------------+-------------------------------+\n"
      "//\n"
      "//  where\n"
      "//\n"
      "//      Sev - is the severity code\n"
      "//\n"
      "//          00 - Success\n"
      "//          01 - Informational\n"
      "//          10 - Warning\n"
      "//          11 - Error\n"
      "//\n"
      "//      C - is the Customer code flag\n"
      "//\n"
      "//      R - is a reserved bit\n"
      "//\n"
      "//      Facility - is the facility code\n"
      "//\n"
      "//      Code - is the facility's status code\n"
      "//\n"
      "//\n"
      "// Define the facility codes\n"
      "//\n\n\n"
      "//\n"
      "// Define the severity codes\n"
      "//\n\n\n";

  const char *msg_fmt1 =
      "//\n"
      "// MessageId: MSG_%d\n"
      "//\n"
      "// MessageText:\n"
      "//\n";

  const char *msg_fmt2 =
      "//\n"
      "#define MSG_%-5d                        0x%08XL\n\n";

  struct tm *tm_p;
  time_t curtime;

  time(&curtime);
  tm_p = localtime(&curtime);
  year = tm_p->tm_year + 1900;
  month = tm_p->tm_mon;
  day = tm_p->tm_mday;
  hour = tm_p->tm_hour;
  minute = tm_p->tm_min;


#ifdef _MSC_VER
  GetUserNameEx(NameSamCompatible, userName, &userNameLen);
#else
  struct passwd *my_pwd;
  my_pwd = getpwuid(getuid());
  if (my_pwd) 
    strncpy(userName, my_pwd->pw_name, userNameLen);
  else
    strcpy(userName, "UnknownUser");
#endif

  /* Write the file header to the output file */
  fprintf(outfile, "%s", filehdr);

  /*
   * Now write MSG_10 to the header.  This contains the time the message file 
   * header was generated and who generated it.
   */
  fprintf(outfile, msg_fmt1, 10);
  fprintf(outfile, "//  00000 99999 UUUUUUUU UUUUU UUUUUUU Message file version: "
                   "{%d-%02d-%02d %02d:%02d %s}.\n",
                   year, month, day, hour, minute, userName);
  fprintf(outfile, msg_fmt2, 10, 10);

  /* Now process the intput file that has been read into a buffer */
  while (*p != '0')
  {
    if (!isdigit(*p))
      break;

    msg_id = atoi(p);

    while (*p != ' ' && *p != '\0')
      p++;

    /* Write the first part of the message header to the output file */
    fprintf(outfile, msg_fmt1, msg_id);

    if (*p != ' ')
    {
      fprintf(stderr, "mkmsghdr: Error in input file for msg %d (1)\n", msg_id);
      break;
    }
    while (*p == ' ')
      p++;

    /* The "p" pointer is now pointing to the first part of the message text.
     * The message text can consist of multiple lines so we need to handle
     * a line at a time in a loop.
     */
    reached_end_of_msg = 0;

    while (!reached_end_of_msg)
    {
      msg_txt = p;
      while (*p != '\n' && *p != '\r' && *p != '\0')
        p++;

      if (p[-1] == '\\')
        p[-1] = '\0';
      else
        reached_end_of_msg = 1;

      if (*p == '\0')
        at_end_of_file = 1;

      *p = '\0';

      fprintf(outfile, "//  %s\n", msg_txt);

      /* Skip any extra new-lines or carriage returns */
      if (!at_end_of_file)
      {
        p++;
        while (*p == '\n' || *p == '\r')
          p++;
      }
    }
    fprintf(outfile, msg_fmt2, msg_id, msg_id);

    /* Skip until a digit is seen */
    while (*p != '\0' && !isdigit(*p))
      p++;
  }
}