인제 태터툴즈 날아간거 복구 했는데 .. 흠.. 쓸 말이 없네 ㅎㅎ

(주저리, 2008/11/10 15:46)
쓸말이 없네 그려 ㅎㅎ

암턴 인제 글 써지니 모은거 써봐야지 -_- 텍스트 큐브로 업글 해봐 -_-;;

top
태그 :주저리    트랙백 0 : 댓글0



서버가 이상해서 제대로 업데이트 안되고 -_-

(분류없음, 2008/07/17 17:22)
서버가 누가 공격을 한건지 이상해져서

권한이 없다고 제대로 되는게 없다.

그래서 재설치겸 서버이사를 해야 될듯 -_-

귀찮은데 언제 가지 ㅎㅎ
top



HTTP 환경변수

(Programming/Web Programming, 2008/06/02 17:06)
미리 정의된 변수 (Predefined variables)
PHP는 모든 스크립트에 대해 그 스크립트가 실행 될 때 여러개의 미리 정의된 변수를 제공한다. 이 변수중 서버의 종류나 버전, 기타 다른 요인으로 인해 달라지는 것도 많은데, 그런 변수는 이곳에 문서화 되지 않았다. 또한 이 변수중 다수는 PHP가 command-line으로 동작할 때는 사용할 수 없다.

이런 여러 요인이 있지만 이곳에서는 가장 일반적인 환경인 Apache 1.3.6 에서 모듈로 PHP3를 설치한 환경에서의 미리 정의된 변수를 살펴보도록 하자.

여러분이 사용하는 시스템의 모든 미리 정의된 변수를 보려면 phpinfo() 함수를 사용하자. (이 함수는 다른 여러 유용한 정보도 알려준다.)

참고: 여기나온 목록은 완전하지 않다. (완벽할 생각도 없다.) 이 목록은 단순히 여러분의 스크립트에서 어떤 종류의 미리 정의된 변수가 사용될 수 있는가의 예시일 뿐이다.


Apache variables
이 변수는 Apache 웹서버로부터 생성된 것이다. 만약 여러분이 다른 웹서버를 사용하고 있다면 이와 동일한 변수가 생성된다고 보장할 수 없다. 아마도 일부는 없어지고, 여기에 없는 변수가 새로 생길 것이다. 여기에 있는 변수중 대부분은 CGI 1.1 specification에서 나온 것이고, 그 내용대로 사용된다.

이곳에 있는 변수중 PHP가 command line으로 동작할 경우 사용될 수 있는 것은 거의 없다.



GATEWAY_INTERFACE
서버가 사용하고 있는 CGI specification의 revision. 예: 'CGI/1.1'.


SERVER_NAME
현재 스크립트가 실행되고 있는 호스트의 이름. 만약 스크립트가 가상 호스트에서 실행되고 있다면, 이 값은 가상 호스트의 값이 될 것이다.


SERVER_SOFTWARE
요구에 대한 대답의 헤더에 사용할 서버 identification 문자열


SERVER_PROTOCOL
페이지가 요구되어질 때 사용한 프로토콜의 이름과 리비젼. 예: 'HTTP/1.0';


REQUEST_METHOD
페이지가 요구될 때 사용된 method: 예: 'GET', 'HEAD', 'POST', 'PUT'.


QUERY_STRING
해당 페이지를 접근할 때 사용된 query string.


DOCUMENT_ROOT
현재 스크립트가 샐행중인 document root 디렉토리. 서버의 설정 파일에 정의되어 있다.


HTTP_ACCEPT
현재의 요구(request)에 포함된 Accept: 헤더의 내용 (존재하는 경우만)


HTTP_ACCEPT_CHARSET
현재의 요구(request)에 포함된 Accept-Charset: 헤더의 내용 (존재하는 경우만). 예: 'iso-8859-1,*,utf-8'.


HTTP_ENCODING
현재의 요구(request)에 포함된 Accept-Encoding: 헤더의 내용 (존재하는 경우만). 예: 'gzip'.


HTTP_ACCEPT_LANGUAGE
현재의 요구(request)에 포함된 Accept-Language: 헤더의 내용 (존재하는 경우만). 예: 'en'.


HTTP_CONNECTION
현재의 요구(request)에 포함된 Connection: 헤더의 내용 (존재하는 경우만). 예: 'Keep-Alive'.


HTTP_HOST
현재의 요구(request)에 포함된 Host: 헤더의 내용 (존재하는 경우만).


HTTP_REFERER
현재 페이지를 찾아온 페이지. 현재페이지로 넘어오는 링크가 있고, 이 링크를 클릭하여 현재 페이지로 넘어온 경우 이전 페이지의 주소가 설정된다. 이 값은 사용자의 브라우저에 따라 설정될 수도 있고 아닐 수도 있다.


HTTP_USER_AGENT
현재의 요구(request)에 포함된 User_Agent: 헤더의 내용 (존재하는 경우만). 현재 페이지를 화면에 표시할 브라우저 소프트웨어의 상징이 되는 문자열이다. 예:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) 특히, 이 값을 get_browser()함수와 함께 사용하면, 해당 페이지를 시용자의 브라우저의 능력에 맞춰서 만들어 낼 수도 있다.


REMOTE_ADDR
사용자가 현재 페이지를 보고 있는 시스템의 IP 주소


REMOTE_PORT
사용자의 시스템이 웹서버와 통신하고 있는 port 번호


SCRIPT_FILENAME
현재 실행되고 있는 스크립트의 절대 경로명


SERVER_ADMIN
웹서버 설정 파일에서 SERVER_ADMIN (Apache의 예) 지시자에 설정되어 있는 값. 만약 스크립트가 가상 호스트 상에서 실행되고 있다면 이 값은 virtual host 설정내에 설정된 값이 된다.


SERVER_PORT
웹서버가 사용하는 port 번호. 기본값으로 보통 '80'이 사용되지만, 예를들어 SSL을 사용하는 경우 여러분이 지정한 secure HTTP 포트의 값이 사용된다.


SERVER_SIGNATURE
server-generated 페이지에 추가되는 서버 버전과 가상 호스트 명. (enabled된 경우만)


PATH_TRANSLATED
모든 virtual을 real로의 전환을 마친 후, 현재 페이지의 파일시스템 기준의 경로. (document root 기준이 아니다.)


SCRIPT_NAME
현재 스크립트의 경로. 이것은 해당 페이지가 자기 자신을 가리킬 때 사용하면 유용하다.


REQUEST_URI
이 페이지를 접근하기 위해 사용한 URI. 예: '/index.html'.


환경 변수 (Environment variables)
이 변수들은 PHP 파서가 실행되고 있는 환경 변수로 부터 PHP의 전역 변수 영역으로 옮겨진 변수들이다. 많은 변수는 PHP가 실행되는 쉘에서 제공하고 있고, 그 내용은 시스템과 쉘에 따라 모두 각각 다르기 때문에 명확한 변수들의 목록을 제시하는 것은 불가능하다. 어떤 환경 변수들이 정의 되어 있는지 알아보려면 여러분의 쉘에 관한 문서를 살펴 보도록 하라.

CGI 변수를 포함한 다른 환경변수들은 PHP가 CGI로 동작하거나 모듈로 동작하건 간에 사용할 수 있다.

PHP 변수
이 변수들은 PHP 자신이 만드는 것이다. $HTTP_*_VARS 변수들은 track_vars 설정이 켜져 있는 경우에만 사용이 가능하다.

참고: PHP 4.0.3에서 track_vars는 설정 파일의 설정과 관계없이 항상 켜져 있다.

만약 register_globals 지시자가 설정되어 있으면, 이 변수들은 스크립트의 전역 영역에서 접근 가능한 변수로 만들어 진다. ($HTTP_*_VARS 배열 변수와는 별도로 생성된다.) 이 설정은 매우 조심해서 사용해야 하고, 가능하면 이 설정은 꺼 두고 $HTTP_*_VARS 변수를 사용하는 것이 안전하다. 악의적인 의도를 가진 사용자가 사용자 입력을 사용해서 원래 있는 전역 변수의 내용을 덮어 써 버릴 수 있다. 만약 register_globals설정을 끌 수 없는 상황이라면, 여러분이 해당 변수를 사용하는 각 스텝마다 그 변수가 안전한 것인지를 반드시 확인하는 절차가 있어야 한다.



argv
스크립트에 전달된 아귀먼트(argument)의 배열. 스크립트가 커맨드라인 에서 실행되었다면, 커맨드라인의 파라메터들을 C 형태로 접근할 수 있게 해 준다. 만약 GET 방식으로 호출된 경우라면, 이 배열은 쿼리 문자열의 내용을 담고 있다.


argc
스크립트로 넘어온 커맨드라인 파라메터의 개수. (커맨드라인 형태로 호출한 경우)


PHP_SELF
document root를 기준으로 한 현재 실행중인 스크립트의 파일 이름. PHP를 커맨드라인으로 샐행한 경우 이 변수는 사용할 수 없다.


HTTP_COOKIE_VARS
현재 스크립트에 HTTP 쿠키를 사용해 전달된 변수의 associative 배열


HTTP_GET_VARS
현재 스크립트에 HTTP GET 메소드를 사용해 전달된 변수의 associative 배열


HTTP_POST_VARS
현재 스크립트에 HTTP POST 메소드를 사용해 전달된 변수의 associative 배열


HTTP_POST_FILES
현재 스크립트에 HTTP POST 메소드를 사용해 업로드된 파일에 대한 정보를 가진 associative 배열 $HTTP_POST_FILES 배열의 내용에 대한 자세한 정보는 POST method uploads 부분을 살펴보자.


$HTTP_POST_FILES 변수는 4.0.0 이후에서만 유효하다.


HTTP_ENV_VARS
현재 스크립트에 현재 환경 변수에서 전달된 변수의 associative 배열


HTTP_SERVER_VARS
현재 스크립트에 HTTP 서버에서 전달된 변수의 associative 배열 이 변수들은 위에서 언급한 Apache 변수들과 유사한 내용으로 되어있다.

출처 : phpschool.com
top



쥐박이를 몰아내자 몰아

(주저리, 2008/05/09 15:07)
http://agora.media.daum.net/petition/view?id=40221


쥐박이를 몰아내자 몰아

내자.
top



난 원래 정치에 관심이 없지만, 나도 살아야 되지 않겠니-_-;

(주저리, 2008/05/04 19:03)
머 오는 사람도 없는 블로그다만은

그래도 나도 살아야 되지 않겠니. 씨발라마..

미친소는 너나 쳐먹고 나 IT로 쳐벌어먹고 사는데 인터넷 종량제해서 누구 배를 채워주겠다고,

쪽바리 왕이 쪽바리 왕이 천어쩌구(입에 담기도 싫다) 이런 개새...

인제 교통사고나서 앰블런스 부를때도 제정신 차려서 내가 보험사에 전화해서 불러야 되냐-_-;;

넌 교통사고 나서 제정신일꺼 같냐? 응응~~

그리고 누구 맘대로 우리땅 남한테 팔아 먹냐-_-;; 누가 도대체 널 찍었다냐.

내 주위는 한명도 없던데.. 미스터리 할뿐이다. 짜증이 아주 파도 갔다. 그걸 기자회견이고 답변이라고 시키냐? 그건 초딩도 그것보단 잘하겠따. 병신들아. 전문가-_- 장관 염병할 새끼들..

우리나라에 땅파서 운하 만들어서 머할껀데-_- 미친 그걸로 관광을 해? 넌 하겠니 그걸 그거 없어도
갈때 많아 우리나라... 미친 환경파괴에 돈 낭비에 하는걸 웨 하겠다고 지럴이야.

하도 좆 같은게 많아서 모르겠다. 도대체 멀 더 하려는지 모르겠다.

인제 나도 소환장보내고 경찰서 나오라고 하겠지? 맘대로 해봐라.

요새는 촛불 집회가 불법집회로 변하냐? -_-;; 헌법에 보장된 자유는 어디 간거냐-_-;; 응 니 맘대로냐.. 왠간히 해라.

누구한테 이야기 하는지 알겠지 2MB시발라마.

그냥 그만 두고 내려와라.
------------------------------------

이렇게라도 써 놓지 않으면 화가 풀리지 않을꺼 같네요.. 이해 해주세요
top



RTTI의 이해

RTTI는 Run-Time Type Information의 약자로써, 실행시간에 객체의 타입 정보를 얻게 하는 C++의 확장? 정도 이다.
자바나 C#의 경우에는 리플렉션의 축소판 정도라고 생각하면 되겠다.

우선은 RTTI를 위하여 구현해야 하는 기능을 보자.

- 실행 시에 알려지지 않은 클래스의 이름과 크기를 얻을 수 있어야 한다.
- 실행 시에 알려지지 않은 클래스를 동적으로 생성할 수 있어야 한다.


우선 실행 시에 클래스의 이름을 얻는 방법부터 보자.
이를 위해서는 딱 두가지의 처리만 해주면 된다.

1. 자신의 클래스의 이름을 저장하는 정적변수를 만든다.
2. 그 이름을 리턴하는 GetClassName()을 오버라이드(override)한다.

소스로 보는 것이 더 확실할 것이다.

class CObject {
public:
    // 자신의 클래스이름을 반환하는 메서드를 만든다.
    virtual char* GetClassName() const { return NULL; }
};

class CSomeObject : public CObject {
public:
    // 자신의 클래스 이름을 반환하는 메서드를 오버라이드한다.
    virtual char* GetClassName() const { return lpszClassName; }

    // 자신의 클래스의 이름을 저장하는 정적변수를 만든다.
    static char lpszClassName[];
};

char CSomeObject::lpszClassName[] = "CSomeObject";

void main() {
    // 사용하는 방법.
    CObject *p;
    p = new CSomeObject;
    cout << p->GetClassName(); // 동적으로 만들어진
                                               // 클래스의 이름을 알 수 있다!!
    delete p;
}

실행결과는 다음과 같을 것이다.

CSomeObject

이것을 매크로로 정의하여 편하게 사용하여 보자.

그 매크로는 바로 두구두구두구두구!!!!

DECLARE_CLASSNAME(s)
IMPLEMENT_CLASSNAME(s)

위의 두 매크로들이다.

선언은 아래와 같이 되어있다.

#define DECLARE_CLASSNAME(s) static char lpszClassName[]
#define IMPLEMENT_CLASSNAME(s) char s##::lpszClassName=(#s)

간단하게 사용하는 예제를 적어본다.
(위의 예제와 똑같은 것이므로 주석은 안 달았다.)

class CObject {
public:
    virtual char* GetClassName() const { return NULL; }
};

class CSomeObject : public CObject {
public:
    DECLARE_CLASSNAME(CSomeObject);
    virtual char* GetClassName() const { return lpszClassName; }
};
IMPLEMENT_CLASSNAME(s);

void main() {
    CObject *p;
    p = new CSomeObject;
    cout << p->GetClassName();
    delete p;
}

이제 실행 시에 클래스의 이름을 알아내는 방법은 알았다.

책에서는 저렇게 하였으나, 개인적인 생각으로는
 DECLARE_CLASSNAME(s) 매크로를

#define DECLARE_CLASSNAME(s) static char lpszClassName[];
                   virtual char* GetClassName() const { return lpszClassName; }

으로 하는 것이 나을 꺼 같다.


-------------------------------------------------------------------------------


이제 동적 생성을 지원하기 위한 조건을 알아보도록 하겠습니다.

우선 동적 생성을 지원하는 클래스를 만들기 위해서
코드 자동 생성기가 해야 하는 작업을 구체적으로 살펴보면,

1. 객체의 클래스 이름을 알 수 있어야 되며,
2. 객체의 크기를 알 수 있어야 되며,
3. 클래스를 동적으로 생성하기 위한 함수를 갖어야 한다.

위의 작업이 가능하도록 구조체를 만들어 봅니다.

struct CRuntimeClass {
    char m_lpszClassName[21]; // 객체의 클래스 이름
    int m_nObjectSize;            // 객체의 크기
    CObject* (*pfnCreateObject)();  // 실제 객체를 생성하기 위한 함수 포인터
    CObject* CreateObject;            // 객체를 생성하기 위한 함수(인터페이스)
};

// 단순히 pfnObject 함수포인터를 랩핑(wrapping)한다.
CObject* CRuntimeClass::CreateObject() { return (*pfnObject)(); }


이제 문제는 자신을 동적으로 생성하는 코드를 어떤 방식으로 준비하느냐 하는 것이다.

해답은 정적(static) 맴버 함수를 이용하는 것이다.
(객체가 만들어지기 전에 이미 메모리상에 존재하므로 가능하게 된다.)

그럼 CObject를 고쳐보자.

class CObject {
    virtual CRuntimeClass* GetRuntimeClass() const { return NULL; }
    static CRuntimeClass classObject;
    virtual ~CObject() { }
protected:
    CObject() { printf("CObject constructor\n"); }
};

CRuntimeClass CObject::classObject = { "CObject", sizeof(CObject), NULL };

그리고 실제로 상속받아서 클래스를 구현하는 경우를 살펴보자.

class CAlpha : public CObject {
public:
    virtual CRuntimeClass* GetRuntimeClass() const { return &classCAlpha; }
    static CRuntimeClass classCAlpha;
    static CObject* CreateObject();
protected:
    CAlpha() { printf("CAlpha constructor\n"); }
};

CRuntimeClass CAlpha::classCAlpha = { "CAlpha", sizeof(CAlpha), CAlpha::CreateObject };

CObject* CAlpha::CreateObject() { return new CAlpha; /* 자신을 동적으로 생성한다. */ }

이제 이것을 어떻게 쓰는지만 알면 해결이다.

#define RUNTIME_CLASS(class_name) (&class_name::class##class_name)

void main(void) {
    CRuntimeClass* pRTCAlpha = RUNTIME_CLASS(CAlpha);
    // CRuntimeClass* pRTCAlpha = &CAlpha::classCAlpha;
    CObject* pObj1;
    pObj1 = pRTCAlpha->CreateObject();
    printf("CAlpha class=%s\n", pObj1->GetRuntimeClass()->m_lpszClassName);

    delete pObj1;
}

실제로 MFC에서는 매크로로 만들어서 사용하고 있다. (afx.h에 있다.)

#define DECLARE_DYNAMIC(class_name) static CRuntimeClass class##class_name
#define IMPLEMENT_DYNAMIC(class_name) CRuntimeClass \
                                                            class_name::class##class_name = { \
                                                            (#class_name), \
                                                            sizeof(class_name), \
                                                            class_name::CreateObject };

#define DECLARE_DYNCREATE(class_name) static CObject* CreateObject();
#define IMPLEMENT_DYNCREATE(class_name) CObject* \
                                                               class_name::CreateObject() { \
                                                                  return new class_name; \
                                                                }


그럼 마지막으로 매크로를 이용해서 종합해보자.

class CAlpha : public CObject {
public:
    virtual CRuntimeClass* GetRuntimeClass() const { return &classCAlpha; }
    DECLARE_DYNAMIC(CAlpha);
    DECLARE_DYNCREATE(CAlpha);
protected:
    CAlpha() { printf("CAlpha constructor\n"); }
};
IMPLEMENT_DYNAMIC(CAlpha);
IMPLEMENT_DYNCREATE(CAlpha);

class CBeta : public CObject {
public:
    virtual CRuntimeClass* GetRuntimeClass() const { return &classCBeta; }
    DECLARE_DYNAMIC(CBeta);
    DECLARE_DYNCREATE(CBeta);
protected:
    CBeta() { printf("CBeta constructor\n");
};
IMPLEMENT_DYNAMIC(CBeta);
IMPLEMENT_DYNCREATE(CBeta);

void main() {
   // Create CAlpha class
    CRuntimeClass *pRTCAlpha = RUNTIME_CLASS(CAlpha);
    CObject *pObj1;
    pObj1 = pRTCAlpha->CreateObject();
    printf("CAlpha class=%s\n", pObj1->GetRuntimeClass()->m_lpszClassName);

   // Create CBeta class
    CRuntimeClass* pRTCBeta = RUNTIME_CLASS(CBeta);
    CObject *pObj2;
    pObj2 = pRTCBeta->CreateObject();
    printf("CBeta class=%s\n", pObj2->GetRuntimeClass()->m_lpszClassName);

    delete pObj1;
    delete pObj2;
}

출처 : http://rhio.tistory.com/5

top



[Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)

제    목  : [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)
작 성 일  : 2007년 03월 14일
작 성 자  : 제용재 (182cm@korea.com)
개발환경  : Visual Basic 6.0
분    류  : Development -> Visual Basic
키 워 드  : Visual Basic, Vista, UAC, rc.exe, mt.exe
요    약  : Admin 계정으로 로그인했더라도 프로그램을 실행시키면 일반 사용자 권한으로 프로그램이 실행된다.
            Admin 권한으로 실행 시키기 위해서는 "관리자 권한으로 실행"을 이용하거나 권한 관련 속성 정보를 변경해야만 한다.



Vista에서는 UAC(User Account Control, 사용자 계정 관리) 기능을 통해 프로그램 실행에 대한 권한을 강화했는데, 일반 사용자 권한으로 실행되는 프로그램에서는 시스템 폴더, Program Files 폴더, 레지스트리 제어 등에 있어 많은 제약이 따르게된다.

UAC 기능을 고려하지 않은 프로그램을 Admin 권한으로 실행하는 방법은 다음과 같다.

    1. Vista 제어판을 통해 UAC 기능을 중지 시킨다. (비추)
        - UAC 기능이 불편함을 초래할 수는 있으나, 사용자 모르게 임의로 실행되는 악성
          프로그램 등으로부터 보호하는 기능을 가지고 있으므로 가급적 사용을 권장한다.
    2. 실행 파일에서 오른쪽 버튼 클릭 후 "관리자 권한으로 실행" 메뉴 선택
        - 경우에 따라 Admin 권한을 부여하기 위한 일회성 방법이다.
        - "사용자 계정 컨트롤"의 권한 상승 화면을 거쳐야 한다.
    3. 실행 파일의 속성->호환성 탭에서 "관리자 권한으로 이 프로그램 실행" 체크
        - 속성 변경 후에는 자동으로 Admin 권한으로 실행된다.
        - "사용자 계정 컨트롤"의 권한 상승 화면을 거쳐야 한다.
        - 파일명을 변경하거나 위치(폴더)를 이동하는 경우, "권한 수준" 내용을 초기화 된다.

 
Vista에서 Admin 권한으로 실행되는 프로그램을 만들기 위해서는 manifest 파일을 리소스에 포함시키면 되는데 VB6의 리소스 편집기에서는 manifest 리소스 관리를 지원하지 않으므로 [1]VS6의 rc.exe 프로그램을 이용해서 리소스 파일을 만들고 이 리소스 파일을 포함해서 컴파일한다. 또는 [2]VS2005의 mt.exe를 이용해서 이미 컴파일 된 프로그램에 manifest 정보를 추가한다.

[1] manifest 리소스 정보를 포함해서 컴파일하는 방법

1) manifest 파일 만들기
    - 다음의 내용을 텍스트 파일로 저장한다. (파일명 : "app_name.exe.manifest")
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="AdminApp"
     type="win32"/>

  <description>Description of your application</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>

        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>


2) ResourceScript 파일 만들기
    - 다음의 내용을 텍스트 파일로 저장한다. (파일명 : ResourceScript.rc)
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST                     24
CREATEPROCESS_MANIFEST_RESOURCE_ID   RT_MANIFEST    "app_name.exe.manifest"


3) rc.exe 를 이용한 리소스 파일 만들기
    - 도스창에서 다음의 명령을 입력해서 리소스 파일을 만든다.
    - "c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\" 폴더에 있다.
"RC.EXE" /r /fo app_name.res ResourceScript.rc


4) VB 프로젝트에 리소스 파일 추가
   - VB에서 프로젝트->파일 추가 메뉴를 통해 3)에서 만든 리소스 파일(app_name.res)을 프로젝트 리소스 파일로 등록한다.

5) 프로젝트 컴파일

6) Vista의 UAC 사용 환경에서 테스트


[2] VS 2005의 mt.exe를 이용하는 방법

1) Admin 권한 부여를 위한 프로그램(EXE) 준비

2) manifest 파일 만들기 ([1]과 동일)

3) 실행 파일에 manifest 정보 추가하기

mt -manifest app_name.exe.manifest -outputresource:app_name.exe;#1


4) Vista의 UAC 사용 환경에서 테스트


※ manifest 적용 후에는 다음 그림처럼 방패 모양이 추가되는 것을 볼 수 있다. (Vista에서 확인 가능)
사용자 삽입 이미지 사용자 삽입 이미지


※ manifest 적용 및 테스트를 위한 예제 프로젝트





☞ 본문 출처 : http://www.enjoydev.com/blog/107(새 창으로 열기)

☞ 본인의 글 입니다. 이 글을 다른 곳에 게재하는 경우 본문 출처를 밝혀주시기 바랍니다.

☞ 위 내용은 정식 문서 번역이 아닌, 실무 적용에 따른 경험을 바탕으로 어느정도 자의적인 설명이 포함되어있습니다.
   잘못된 내용이 있는 경우 지적 바랍니다.
top



다중 터미널 입력기 일꾼 0.0.3 공개 합니다.

다중 터미널 입력기 일꾼 v 0.0.3
 

사용 툴  : VS 2003


1. 사용 가능 터미널
    - 테라텀
    - XShell(2.0, 3.0)
    - PineTerm
    - CRT, SecureCRT
    - Putty(텔넷, SSH는 테스트 안해봤음)
2. 한글은 입력되지 않습니다.
3. 붙여 넣기는 버튼을 이용하시면 됩니다.
4. 프로그램을 실행하시고 찾기를 누르면 터미널에 등록 되고 표시 됩니다.
5. 최소화한 터미널 창은 입력되지 않습니다.


Histroy

수정 사항 (v 0.0.3)
- 붙여넣기가 최소화일때만 적용 되는 것 정상 작동하도록 수정


수정 사항 (v 0.0.2)
- Putty 터미널 못 찾는 버그 수정
- ESC 입력 가능
- 탭 입력 가능
- 항상 위 기능 및 버튼 추가
- 최소화 화면 입력 막기 버그 수정

top



FTP 500 OOPS: cannot change directory

(Tips, 2008/02/12 12:16)

-------- SELINUX 의 정책이 문제이군요
# setsebool -P ftp_home_dir 1
페도라 코어 4 까실때 SELinux 로 설정했다면 디폴트로 사용자의 home 디렉토리에 쓰기를 막아놓는다.
SELinux 설정에서 FTP 부분을 변경하자.
# service vsftpd restart
home 디렉토리의 읽고쓰기를 1(True)로 변경하시고 vsftpd 를 재시작.

# setsebool -P ftpd_disable_trans 1
FTP 에 관하여 SELinux 정책을 아예 적용하지 않는 옵션을 설정




"500 oops: cannot change directory"

Trying to ftp in to a Fedora Core 5 box using a local username. Password is accepted, but the connection is then closed with this error message.

This is because of SELinux's policies. To fix it, issue (as root):

setsebool -P ftp_home_dir=1

The -P flag ensures the value is saved after reboot.

------------------------------------------------------------------------------

ftp 정상적인 세팅 상태에서 로그인 후
500 OOPS: cannot change directory

와 같은 메세지가 출력되며 접속이 끊어질 경우 다음과 같이 하면 됩니다.


/etc/selinux/config 에서
SELINUX=permissive


와 같이 바꾸면 됩니다. SELINUX의 Deny를 permissive로..
즉 메세지만 로그에 남기고 접근을 허용하는 것이지요.
enforcing이 기본인데 이것은 접근을 차단하는 것입니다.


출처 : http://breathair.tistory.com/8

top



제9회 한국자바개발자컨퍼런스

(주저리, 2008/02/05 10:19)
top



◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [13] : NEXT ▶



ķ