Sunday, September 20, 2015

Merging pdf files

$ sudo pdftk a.pdf b.pdf cat output a_and_b.pdf
$ sudo pdftk a_and_b.pdf cat 13 42 output pages_13_and_42.pdf

Tuesday, December 23, 2014

19.1.1 Операторууд (operators)

Хүснэгт 19.2. С++ хэлний операторууд

Оператор
Oперанд
Тайлбар
Жишээ
Нийцэл
XA
::
нэг
глобал үйлчлэх хүрээг заана
:: name
<
-
::
хоёр
класс/нэрийн мужийн үйлчлэх хүрээг заана
className::memberName
>
-
->
хоёр
гишүүн элементийг заагчаар дамжуулан сонгох
ptr->memberName
>
-
.
хоёр
гишүүн элементийг обьектоор дамжуулан сонгох
obj.memberName
>
-
->
нэг
ухаалаг заагч
obj->member
<
Г
[ ]
хоёр
индексийг заана
ptr[expr]
>
Г
( )
дурын [a]
функц дуудах
function(argList)
>
-
( )
дурын
анхны утгыг оноох
className(argList)
>
Г
++
нэг
постфикс нэмэгдүүлэх
varName++
<
+
--
нэг
постфикс хорогдуулах
varName--
<
+
typeid
нэг
төрөл тогтоох
typeid(type) or typeid(expr)
<
-
dynamic_cast
хоёр
төрлийг хяналттайгаар динамик горимд хувиргах
dynamic_cast<type>(expr)
>
-
static_cast
хоёр
төрлийг хяналттайгаар статик горимд хувиргах
static_cast<type>(expr)
>
-
reinterpret_cast
хоёр
төрлийг хянахгүй хувиргах
reinterpret_cast<type>(expr)
>
-
const_cast
хоёр
тогтмолыг хувиргах
const_cast<type>(expr)
>
-
sizeof
нэг
хэмжээг байтаар илэрхийлэх
sizeof expr or sizeof(type)
<
-
++
нэг
префикс нэмэгдүүлэх
++varName
<
+
--
нэг
префикс хорогдуулах
--varName
<
+
~
нэг
бит дээрх үгүйсгэл
~ expr
<
+
!
нэг
логик үгүйсгэл
! expr
<
+
+, -
нэг
унарy plus, unary minus
+expr or -expr
<
+
*
нэг
заагчийн агуулгыг сонгох
* ptr
<
+
&
нэг
хаяг тогтоох
& lvalue
<
+
new
нэг
санах ой хуваарилах
new type or new type(expr-list)
<
+
new [ ]
нэг
дараалласан санах ой хуваарилах
new type [ size ]
>
+
delete
нэг
хуваарилсан санах ойг чөлөөлөх
delete ptr
<
+
delete [ ]
нэг
дарааллан хуваарилсан санах ойг чөлөөлөх
delete [ ] ptr
<
Г
( )
хоёр
төрлийг шилжүүлэх С хэлний хэлбэр
( type ) expr
<
- [b]
->*
хоёр
заагчийн тусламжтайгаар гишүүн заагчийг сонгох
ptr->*ptrToMember
>
Г
.*
хоёр
обьектийн тусламжтайгаар гишүүн заагчийг сонгох
obj.*ptrToMember
>
-
*
хоёр
үржүүлэх
expr1 * expr2
>
+
/
хоёр
хуваах
expr1 / expr2
>
+
%
хоёр
хуваалтын үлдэгдэл олох
expr1 % expr2
>
+
+
хоёр
нэмэх
expr1 + expr2
>
+
-
хоёр
хасах
expr1 - expr2
>
+
<<
хоёр
зүүн тийш шилжүүлэх
expr << shiftAmt
>
+
>>
хоёр
баруун тийш шилжүүлэх
expr >> shiftAmt
>
+
<
хоёр
бага
expr1 < expr2
>
+
<=
хоёр
бага буюу тэнцүү
expr1 <= expr2
>
+
>
хоёр
их
expr1 > expr2
>
+
>=
хоёр
их буюу тэнцүү
expr1 >= expr2
>
+
==
хоёр
тэнцүү [c]
expr1 == expr2
>
+
!=
хоёр
тэнцүү биш
expr1 != expr2
>
+
&
хоёр
бит AND
expr1 & expr2
>
+
^
хоёр
бит XOR
expr1 ^ e2
>
+
|
хоёр
бит OR
expr1 | expr2
>
+
&&
хоёр
логик AND
expr1 && expr2
>
+
||
хоёр
логик OR
expr1 || expr2
>
+
=
хоёр
утга оноох
expr1 = expr2
<
+
*=
хоёр
үржүүлж утга оноох
expr1 *= expr2
<
+
/=
хоёр
хувааж утга оноох
expr1 /= expr2
<
+
%=
хоёр
хуваалтын үлдэгдлээр утга оноох
expr1 %= expr2
<
+
+=
хоёр
нэмж утга оноох
expr1 += expr2
<
+
-=
хоёр
хасаж утга оноох
expr1 -= expr2
<
+
<<=
хоёр
зүүн шилжүүлж утга оноох
expr1 <<= expr2
<
+
>>=
хоёр
баруун шилжүүлж утга оноох
expr1 >>= expr2
<
+
&=
хоёр
AND үйлдлээр утга оноох
expr1 &= expr2
<
+
|=
хоёр
ОR үйлдлээр утга оноох
expr1 |= expr2
<
+
^=
хоёр
ХOR үйлдлээр утга оноох
expr1 ^= expr2
<
+
? :
гурав
нөхцөлт илэрхийлэл
bool ? expr : expr
>
-
throw
нэг
Throw exception
throw expr
<
-
,
хоёр
дэс дараалан гүйцэтгэх
expr , expr
>
+
[a] Функц дуудах операторын операндын тоо хэмжээ дурын байж болно.
[b] Төрөл хувиргах оператор нь хэрэглэгчийн тодорхойлсон төрлийг хувиргахдаа байгуулагч эсвэл хувиргалтын операторуудыг ашиглаж болно.
[c] Энэ операторыг float эсвэл double төрлийн операндуудад хэрэглэж болохгүй.

Wednesday, December 17, 2014

19.1. Операторууд (operators)

Операторуудыг хэрэглэгдэх байдлаар нь ангилан ялгавал:

утга оноох операторууд =, +=, *=, …
арифметик операторууд
+, -, *, %
жиших операторууд
<, <=, >, >=, ==, !=
логик операторууд
&&, ||, !
бит операторууд
&, |, ^, ~, <<, >>
санах ойн удирдлагын операторууд
new, delete, sizeof
заагч болон хандалтын операторууд
*, &, ., ->, [], ()
үйлчлэх хүрээний оператор
::
бусад операторууд
conditional(?:), comma(,)

С++ стандартад тодорхой түлхүүр үгнүүдийг (keyword) зарим операторын орлуулгын нэрээр (alias) оноож өгсөн байдаг.

19.1. Хүснэгт, операторын орлуулгын нэрс

Оператор
Орлуулах нэр
&& and
& bitand
&= and_eq
|| or
| bitor
|= or_eq
^ xor
^= xor_eq
! not
!= not_eq
~ compl

Ихэнх (гэхдээ бүгд биш) дотоод төрлүүдийн (built-in type) хувьд операторуудыг урьдчилан тодорхойлсон байдаг.

Операторын шинж чанар (operator characteristics)

Операторууд дараах онцгой шинж чанарыг агуулна:
  • эрэмбэ (precedence)
  • нийцэл (associativity)
  • шаардагдах операндын тоо (number of required operands)

19.2. хүснэгтэд С++ хэлний бүх операторуудыг эрэмбээр нь жагсаан (өндөр эрэмбийн операторууд жагсаалтын дээд хэсэгт), хэрэглээний дагуу бүлэглэн харуулав.
  • Операнд багана тухайн операторт шаардлагатай операндын тоог харуулна.
  • Тайлбар багана тухайн операторын дотоод төрөлд зориулсан тодорхойлолтыг агуулна.
  • Нийцэл багана хэрэв ижил оператор нэгэн зэрэг олон тоогоор хэрэглэгдвэл хоорондоо хэрхэн нийцэхийг үзүүлнэ. Үүнд:
    • >“ тэмдэглэгээ зүүнээс баруун гэсэн нийцлийг илтгэнэ. Жишээ нь:
      d = a + b + c; // эхэлж a + b үйлдлийг, дараа нь (a + b) + c үйлдлийг гүйцэтгэнэ.
    • <“ тэмдэглэгээ баруунаас зүүн гэсэн нийцлийг илтгэнэ. Жишээ нь:
      c = b = a; // а эхэлж b-д, дараа нь с-д оноогдоно.
  • Хэт ачаалал (XA) багана тухайн операторыг хэрэглэгчийн төрөлд дахин шинээр тодорхойлох боломжтой эсэхийг харуулна.
    • +” тэмдэглэгээ нь операторыг глобал, эсвэл гишүүн функц хэлбэрээр хэтрүүлэн ачааллах боломжтойг илтгэнэ.
    • Г” тэмдэглэгээ нь операторыг зөвхөн гишүүн функц хэлбэрээр хэтрүүлэн ачааллах боломжтойг илтгэнэ.
    • -“ тэмдэглэгээ нь операторыг хэтрүүлэх ачааллах боломжгүйг илтгэнэ.

Monday, December 15, 2014

19-бүлэг. Төрөл, илэрхийлэл

Энэ бүлэгт С++ хэл дэх төрлийн систем, түүнчлэн илэрхийлэл хэрхэн үнэлэгдэж, хувиргагддаг талаар гүнзгийрүүлэн авч үзэх болно.

Юуны түрүүнд цаашид хэрэглэгдэх зарим хэллэгүүдийн товч тодорхойлолтыг өгье.
Оператор гэдэг нь функцийн тусгай нэгэн төрөл бөгөөд өгөгдсөн операнд дээр тодорхой үйлдлийг гүйцэтгэж, үр дүнг нь буцаана. Операнд гэдэг нь аль нэг операторын аргумент юм.

Ерөнхийдөө оператор нь энгийн функц бөгөөд зарим тохиолдолд эдгээр функцийг инфикс үйлдлийн тэмдэгтэйгээр (+, -, *, / зэрэг) дуудаж болно гэж ойлгох нь зохимжтой. Өөрөөр хэлбэл функц дуудах урт бичлэгтэй синтаксийн (sum = operator+(a, b);) оронд уншихад илүү дөхөм инфикс синтаксыг (sum = a + b;) ашиглаж болно.

Илэрхийлэл нь нэг эсвэл олон тооны операнд болон фунцкуудээс тогтоно. Илэрхийлэл бүр тодорхой төрөл, мөн утгатай байна. Уг утга нь тухайн өгөгдсөн операнд дээр операторын тодорхойлолтод заасан үйлдлийг гүйцэтгэснээр гарч ирнэ.

Monday, March 12, 2012

Customizing SELinux policy

Problem: when to upload a file to TFTP server, which runs on Linux host (i.e., Fedora guest), SELinux denies this access and reports it to AVC audit file in "/var/log/audit/audit.log". It happens, because any request of tftp daemon on specified target directory and file are not allowed in the SELinux policy.

Solution: to resolve this issue, a corresponding custom policy module can be created and added to SELinux policy with the "audit2allow" tool.

Case: for example, consider the following AVC audit log, after invoking following command from a remote Windows host:

"tftp -i 192.168.0.120 PUT installed_apps.txt"

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

Summary:

SELinux is preventing in.tftpd (tftpd_t) "search" to ./mnt (mnt_t).

Detailed Description:

SELinux denied access requested by in.tftpd. It is not expected that this access
is required by in.tftpd and this access may signal an intrusion attempt. It is
also possible that the specific version or configuration of the application is
causing it to require additional access.

Allowing Access:

Sometimes labeling problems can cause SELinux denials. You could try to restore
the default system file context for ./mnt,

restorecon -v './mnt'

If this does not work, there is currently no automatic way to allow this access.
Instead, you can generate a local policy module to allow this access - see FAQ
(http://fedora.redhat.com/docs/selinux-faq-fc5/#id2961385) Or you can disable
SELinux protection altogether. Disabling SELinux protection is not recommended.
Please file a bug report (http://bugzilla.redhat.com/bugzilla/enter_bug.cgi)
against this package.

Additional Information:

Source Context system_u:system_r:tftpd_t:s0-s0:c0.c1023
Target Context system_u:object_r:mnt_t:s0
Target Objects ./mnt [ dir ]
Source in.tftpd
Source Path /usr/sbin/in.tftpd
Port
Host efe1272.efe
Source RPM Packages tftp-server-0.49-1.fc10
Target RPM Packages filesystem-2.4.19-1.fc10
Policy RPM selinux-policy-3.5.13-74.fc10
Selinux Enabled True
Policy Type targeted
MLS Enabled True
Enforcing Mode Enforcing
Plugin Name catchall_file
Host Name efe1272.efe
Platform Linux efe1272.efe 2.6.27.41-170.2.117.fc10.i686 #1
SMP Thu Dec 10 11:00:29 EST 2009 i686 i686
Alert Count 25
First Seen Mon 12 Mar 2012 09:21:50 AM CET
Last Seen Mon 12 Mar 2012 01:30:02 PM CET
Local ID e48f9047-a5b0-4f62-8510-d57f015c60c1
Line Numbers

Raw Audit Messages

node=efe1272.efe type=AVC msg=audit(1331555402.558:42): avc: denied { search } for pid=12268 comm="in.tftpd" name="mnt" dev=sda3 ino=1036321 scontext=system_u:system_r:tftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:mnt_t:s0 tclass=dir

node=efe1272.efe type=SYSCALL msg=audit(1331555402.558:42): arch=40000003 syscall=12 success=no exit=-13 a0=bfe35e81 a1=1 a2=4f5dec4a a3=bfe34734 items=0 ppid=2289 pid=12268 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="in.tftpd" exe="/usr/sbin/in.tftpd" subj=system_u:system_r:tftpd_t:s0-s0:c0.c1023 key=(null)

By running "audit2allow" on above alert and reviewing the resultant "mntfixlocal.te" policy file will show us (as root):

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

# grep mnt_t /var/log/audit/audit.log | audit2allow -M mntfixlocal
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mntfixlocal.pp

# cat mntfixlocal.te

module mntfixlocal 1.0;

require {
type tftpd_t;
type mnt_t;
class dir search;
}

#============= tftpd_t ==============
allow tftpd_t mnt_t:dir search;

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

To compile and load this policy module invoke following command (as root):

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

# semodule -i mntfixlocal.pp

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

To make sure that the custom policy module is activated, look for any policies regarding "tftpd_t" and "mnt_t" (as user):

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

$ sesearch -A | grep tftpd_t | grep mnt_t
WARNING: This policy contained disabled aliases; they have been removed.
allow tftpd_t mnt_t : dir search ;

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

Alternatively, we can edit the custom policy module .te file to prevent auditing of such alert whilst still allowing SELinux to continue preventing access. We do this by changing the "allow" line to "dontaudit":

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

#============= tftpd_t ==============
dontaudit tftpd_t mnt_t:dir search;

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

This way we can change any alerts to custom policy modules and add them to SELinux policy.

Finally our custom policy module will be shown as follows (as user):

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

$ sesearch -A | grep tftpd_t | grep vmblock_t
WARNING: This policy contained disabled aliases; they have been removed.
allow tftpd_t vmblock_t : file { read write create getattr } ;
allow tftpd_t vmblock_t : dir { write add_name search } ;
-------------------------------------------------------------

Source: http://wiki.centos.org/HowTos/SELinux
and also: http://serverfault.com/questions/106007/tftp-uploads-failing


Tuesday, October 4, 2011

WLAN settings on Nokia N95

To define access point:

Menu -> Tools -> Settings -> Connection -> Access points

- Connection name =
- Data bearer = Wireless LAN
- WLAN network name =
- Network status = Public
- WLAN network mode = Infrastructure
- WLAN security mode = WPA/WPA2 (must be compatible with your WLAN router)
- WLAN security settings
-- WPA/WPA2 = Pre-shared key
-- Pre-shared key = (key phrase used in your WLAN)
-- WPA2 only mode = Off

To activate the access point:

Menu -> Web -> Options -> Settings -> General :
- Access point = Always ask

Nokia N95 MAC address

Dial
*#MAC WLAN#
or
*#62209526#