рдлрд┐рд▓рд╣рд╛рд▓, рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдореМрдЬреВрджрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдмрд╛рджрд▓реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ, рдФрд░ рдореБрдЦреНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рд╕ рдПрдХ рдмрд▓реНрдХрд┐ рдорд╣рдВрдЧреА рдФрд░ рдХрдард┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реАрдзреЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╕рд░реНрдХрд┐рд▓рд╕реА, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рдЧрд┐рдЯрд▓реИрдм рдЬреИрд╕реЗ рдЦреБрд▓реЗ рдордВрдЪ рд╣реЛрдВ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдкрдиреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЙрджреНрдпрдо рд╕рдорд╛рдзрд╛рди) рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдмрд╛рджрд▓реЛрдВ рдореЗрдВ" рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╕рдВрдЧрдарди рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди 24/7ред рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдЕрдкрдиреА рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЧрд┐рдЯрд╣рдм рдХреЛ рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ CI рдХреЛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд┐рдд
.travis.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред
рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ
рдПрд▓рдПрдХреНрд╕рд╕реА (рд▓рд┐рдирдХреНрд╕ рдХрдВрдЯреЗрдирд░) рд▓реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо-рд▓реЗрд╡рд▓ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рд▓рд┐рдирдХреНрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЫреЛрдЯреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдХреНрд▓реЙрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ:
рдиреЛрдЯ: LXC рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд░реИрд╡рд┐рд╕ CI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдирдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╕рдорд╛рдпреЛрдЬрди
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ рдФрд░ GitHub рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдВред
рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдкрдХреЛ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рд╕реНрд╡рд╛рдЧрдд рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд "рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣рд╛рдБ? рдЖрдк рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
, рдЬреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ;
- рднрдВрдбрд╛рд░ рдореЗрдВ .travis.yml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ;
- рдкрд╣рд▓рд╛ рдирд┐рд░реНрдорд╛рдг рдЪрд▓рд╛рдПрдВред
рд╣рдо рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП,
рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдкрд░ рдЬрд╛рдПрдВ рдФрд░ "рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рдЦреБрд▓рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХреНрд╕реЗрд╕ рджреА рдЬрд╛рдПрдЧреАред
рдиреЛрдЯ: рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рддреЗ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, "рдЕрдиреБрдореЛрджрди рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ" рдмрдЯрди рдХреЗ рд╕рд╛рде рдЪрдпрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ, рдФрд░ рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрдВрдЧреЗред
рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рддреБрд░рдВрдд рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ - рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рджрд╛рдИрдВ рдУрд░ "рд╕реЗрдЯрд┐рдВрдЧ" рдмрдЯрдиред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рдВрдбреЛ рдЦреБрд▓ рдЬрд╛рдПрдЧреАред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:
- рдзрд╛рд░рд╛ "рд╕рд╛рдорд╛рдиреНрдп" - рдСрдЯреЛрд░рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛;
- рдзрд╛рд░рд╛ "рдСрдЯреЛ рд░рджреНрдж" - рдЖрдкрдХреЛ рдСрдЯреЛ-рд░рджреНрдж рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
- рдЕрдиреБрднрд╛рдЧ "рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░" - рдЖрдкрдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА, рдЬреИрд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕, ssh рдХреБрдВрдЬрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
- рдЕрдиреБрднрд╛рдЧ "рдХреНрд░реЙрди рдЬреЙрдмреНрд╕" - рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рд╢реЗрдбреНрдпреВрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ред
"рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо рдХреНрд░рдорд╢рдГ
PVS_USERNAME рдФрд░
PVS_KEY рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдпреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк
рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдореЗрд▓рдмреЙрдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рд▓реЗ
MAIL_USER рдФрд░
MAIL_PASSWORD рд╡рд╛рд▓реЗ рдЪрд░ рддреБрд░рдВрдд рдмрдирд╛рдПрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рдЬрдм рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд┐рдд .travis.yml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд▓реЗрддрд╛ рд╣реИред
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕реАрдзреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд╛рд▓рд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред ред
рдЪрд▓реЛ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВред
рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрдмрдВрдЯреВ рдЯреНрд░рд╕реНрдЯреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реА рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ рдФрд░ рд╣рдо рдЙрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
language: c compiler: - gcc - clang
рдиреЛрдЯ : рдпрджрд┐ рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХрд▓рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдп рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред
рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
before_install: - sudo add-apt-repository ppa:ubuntu-lxc/daily -y - wget -q -O - https:
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
script: - ./coccinelle/run-coccinelle.sh -i - git diff --exit-code - export CFLAGS="-Wall -Werror" - export LDFLAGS="-pthread -lpthread" - ./autogen.sh - rm -Rf build - mkdir build - cd build - ../configure --enable-tests --with-distro=unknown
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЪрд░
$ PVS_USERNAME рдФрд░
$ PVS_KEY рдХрд╛ рдбреЗрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдЯреНрд░реЗрд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ:
- pvs-studio-analyzer trace -- make -j4
рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
рдиреЛрдЯ: рдЯреНрд░рд╛рдпрд▓ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ
--disableLicenseExpirationCheck рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic -o PVS-Studio-${CC}.log тАУ-disableLicenseExpirationCheck
рдЕрдВрддрд┐рдо рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкрд░рд┐рдгрд╛рдо рдлрд╝рд╛рдЗрд▓ рдПрдХ HTML рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
- plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
рдЪреВрдВрдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕реАрдЖрдИ рдИрдореЗрд▓ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╣рдо рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рдг рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- sendemail -t mail@domain.com -u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" -m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" -s smtp.gmail.com:587 -xu $MAIL_USER -xp $MAIL_PASSWORD -o tls=yes -f $MAIL_USER -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда:
language: c compiler: - gcc - clang before_install: - sudo add-apt-repository ppa:ubuntu-lxc/daily -y - wget -q -O - https:
рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрдирд╛рдПрдВ:
FROM docker.io/ubuntu:trusty ENV CFLAGS="-Wall -Werror" ENV LDFLAGS="-pthread -lpthread" RUN apt-get update && apt-get install -y software-properties-common wget \ && wget -q -O - https:
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
before_install: - docker pull docker.io/oandreev/lxc env: - CC=gcc - CC=clang script: - docker run --rm --cap-add SYS_PTRACE -v $(pwd):/pvs -w /pvs docker.io/oandreev/lxc /bin/bash -c " ./coccinelle/run-coccinelle.sh -i && git diff --exit-code && ./autogen.sh && mkdir build && cd build && ../configure CC=$CC && pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic && pvs-studio-analyzer trace -- make -j4 && pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic -o PVS-Studio-$CC.log --disableLicenseExpirationCheck && plog-converter -t html -o PVS-Studio-$CC.html PVS-Studio-$CC.log && sendemail -t mail@domain.com -u 'PVS-Studio $CC report, commit:$TRAVIS_COMMIT' -m 'PVS-Studio $CC report, commit:$TRAVIS_COMMIT' -s smtp.gmail.com:587 -xu $MAIL_USER -xp $MAIL_PASSWORD -o tls=yes -f $MAIL_USER -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html"
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреА рд╣реИрдВред
рдиреЛрдЯ : рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ
--cap-add SYS_PTRACE рдпрд╛
--security-opt seccomp: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ptrace рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрдбрд╝ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╢реБрд░реВ рдХреАред
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдкреНрд░рдЧрддрд┐ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрди рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдореЗрд▓ рдореЗрдВ 2 рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ: рдПрдХ рдХреНрд░рдорд╢рдГ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде, рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд╢рдГ рдХреНрд▓реИрдВрдЧред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд╛рдл рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХреЗрд╡рд▓ 24 рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ 46 рдФрд╕рдд рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреАред рдХрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕реВрдЪрдирд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдпрджрд┐ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐
V590 'рд░реЗрдЯ! = (- 1) && рд░рд┐рдЯ == 1' рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдЧрд▓рдд рдЪрд┐рддреНрд░рдг рд╣реИред рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред 107
#define EOF -1 static struct lxc_proc_context_info *lxc_proc_get_context_info(pid_t pid) { .... while (getline(&line, &line_bufsz, proc_file) != -1) { ret = sscanf(line, "CapBnd: %llx", &info->capability_mask); if (ret != EOF && ret == 1)
рдпрджрд┐
рд░рд┐рдЯ == 1 рд╣реИ , рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ -1 (рдИрдУрдПрдл) рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рдЕрддреНрдпрдзрд┐рдХ рд╕рддреНрдпрд╛рдкрди,
рд░рд┐рдЯ! = EOF рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреЛ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ:
- V590 'рд░реЗрдЯ! = (- 1) && рд░рд┐рдЯ == 1' рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдЧрд▓рдд рдЪрд┐рддреНрд░рдг рд╣реИред рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред 579
- V590 'рд░реЗрдЯ! = (- 1) && рд░рд┐рдЯ == 1' рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдЧрд▓рдд рдЪрд┐рддреНрд░рдг рд╣реИред рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ 583
рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХрд╛ рдиреБрдХрд╕рд╛рди
V784 рдмрд┐рдЯ рдорд╛рд╕реНрдХ рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдВрдб рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред conf.c 1879
struct mount_opt { char *name; int clear; int flag; }; static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t size) { struct mount_opt *mo; for (mo = &mount_opt[0]; mo->name != NULL; mo++) { if (strncmp(opt, mo->name, strlen(mo->name)) == 0) { if (mo->clear) { *flags &= ~mo->flag;
рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд,
рд▓рдореНрдмрд╛ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рд╣реИ,
рдореЛ-> рдзреНрд╡рдЬ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рд╣реИред
рдореЛ-> рдзреНрд╡рдЬ рдХреЛ рдмрд┐рдЯрдорд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ 32 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ред рдмрд┐рдЯрд╡рд╛рдЗрд╕ рдХреЗ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рдХреЗ рдмрд╛рдж рдмрд┐рдЯрдХреЙрдЗрдиреНрд╕ рдХреА рдЗрдВрдкреНрд▓рд┐рдореЗрдВрдЯ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдмрд┐рдЯрд╡рд╛рдЗрд╕ рдЙрд▓рдЯрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рд╕реНрдХ рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:
unsigned long long x; unsigned y; .... x &= ~y;
рд╕рд╣реА рдХреЛрдб рд╣реИ:
*flags &= ~(unsigned long)(mo->flag);
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рдФрд░ рд╕рдорд╛рди рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА:
- V784 рдмрд┐рдЯ рдорд╛рд╕реНрдХ рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдВрдб рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред conf.c 1933
рд╕рдВрджрд┐рдЧреНрдз рдЪрдХреНрд░
V612 рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рд╡рд╛рдкрд╕реА'ред conf.c 3477
#define lxc_list_for_each(__iterator, __list) \ for (__iterator = (__list)->next; __iterator != __list; \ __iterator = __iterator->next) static bool verify_start_hooks(struct lxc_conf *conf) { char path[PATH_MAX]; struct lxc_list *it; lxc_list_for_each (it, &conf->hooks[LXCHOOK_START]) { int ret; char *hookname = it->elem; ret = snprintf(path, PATH_MAX, "%s%s", conf->rootfs.path ? conf->rootfs.mount : "", hookname); if (ret < 0 || ret >= PATH_MAX) return false; ret = access(path, X_OK); if (ret < 0) { SYSERROR("Start hook \"%s\" not found in container", hookname); return false; } return true; // <= } return true; }
рдЪрдХреНрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдпрд╣ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЗрд░рд╛рджрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЪрдХреНрд░ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рд╡реНрдпреВрд╣ рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЬрд╛рдирд╛
V557 рдРрд░реЗ рдЕрдВрдбрд░рд░реВрди рд╕рдВрднрд╡ рд╣реИред 'рдмрд╛рдЗрдЯреНрд╕ - 1' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди -1 рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред network.c 2570
static int lxc_create_network_unpriv_exec(const char *lxcpath, const char *lxcname, struct lxc_netdev *netdev, pid_t pid, unsigned int hooks_version) { int bytes; char buffer[PATH_MAX] = {0}; .... bytes = lxc_read_nointr(pipefd[0], &buffer, PATH_MAX); if (bytes < 0) { SYSERROR("Failed to read from pipe file descriptor"); close(pipefd[0]); } else { buffer[bytes - 1] = '\0'; } .... }
рдмрд╛рдЗрдЯреНрд╕ рдкрд╛рдЗрдк рд╕реЗ рдмрдлрд░ рдореЗрдВ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
lxc_read_nointr рдлрд╝рдВрдХреНрд╢рди рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдирд▓ рдЯрд░реНрдорд┐рдирд▓ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ 0 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрдлрд░ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рдФрд░ рд╕рдорд╛рди рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА:
- V557 рдРрд░реЗ рдЕрдВрдбрд░рд░реВрди рд╕рдВрднрд╡ рд╣реИред 'рдмрд╛рдЗрдЯреНрд╕ - 1' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди -1 рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред network.c 2725
рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ
V576 рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдкред 'Sscanf' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддреАрд╕рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪреМрдбрд╝рд╛рдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдкреЗрд╕рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЦрддрд░рдирд╛рдХ рд╣реИред рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рд╕рдВрднрд╡ рд╣реИред lxc_unshare.c 205
static bool lookup_user(const char *oparg, uid_t *uid) { char name[PATH_MAX]; .... if (sscanf(oparg, "%u", uid) < 1) { if (sscanf(oparg, "%s", name) < 1)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
sscanf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЦрддрд░рдирд╛рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░
oparq рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ
рдирд╛рдо рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣
рдирд╛рдо рдмрдлрд░ рдмрдирдиреЗ рдкрд░ рд╡рд┐рджреЗрд╢ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛, рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдЙрдкрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд▓реЗрдЦрди рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХреЛрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рд╕реБрдзрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрди рд▓рдЧреЗрдЧрд╛ред
рдмреЗрд╢рдХ, рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдиреНрдпреВрдирддрдо рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд░реВрдк, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рд╕реАрдЖрдИ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд░реНрдХрд┐рд▓реА, рдЧрд┐рдЯрд▓реИрдм, рдЖрджрд┐ред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
- рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред
- рдЖрдк рдпрд╣рд╛рдВ рд╕реНрдерд╛рдкрд┐рдд PVS-Studio рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
- рдЯреНрд░реИрд╡рд┐рд╕реА рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди ред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдУрд▓реЗрдЧ рдПрдВрдбреНрд░реАрд╡ред
рдХреНрд▓рд╛рдЙрдбреНрд╕ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ-рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдПрдВ